QhelDIV

@____@

[HAOI2007] 上升序列

Qheldiv posted @ 2013年4月06日 22:40 in 题解 with tags 动态规划 题解 HAOI 2007 , 1095 阅读

总是想得很复杂,其实很简单。

用O(n2)或者O(nlogn)的时间复杂度统计出fi即以i开始的最长上升序列是多少

因为字典序的缘故,暴力找最优解

假设某次询问是a,给定的数列是{Ai}

对于第一个位置,为了使字典序最小,我们一定选最早的i,使得fi1>=a

对于第二个位置,Ai2一定 且fi1>=a-1所以接着向后找第一个满足着两个条件的位置

……

这一段的代码:

 

	for(int i=1;i<=M;i++){
	int j,a,b,pr;
		fin>>a;
		b=0;
		A[pr=0]=-1;
		for(j=1;j<=N;j++)
			if(f[j]>=a && A[j]>A[pr]){
				Ans[++b]=j;
				a--;
				if(!a)
					break;
				pr=j;
			}
		if(b<a){
			fout<<"Impossible\n";
			continue;
		}
		for(j=1;j<=b;j++)
			fout<<A[Ans[j]]<<" ";
		fout<<endl;
	}
Avatar_small
seo service london 说:
2024年2月22日 17:24

I really loved reading your blog. It was very well authored and easy to understand


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter