首页 > 其他 > 详细

Codeforces 474E Pillars(论数据的重要性)

时间:2015-01-01 17:20:24      阅读:301      评论:0      收藏:0      [点我收藏+]

  今天做到这道题,一看是一道很水的最长不下降序列吧,但是数据超级大,怎么办,突发奇想,因为每一次都要和前面比,那么需要从第一个状态推现在的状态,那么有数据比较水,也许前面的600个状态就可一推理到,那么直接从他的钱600个状态推就水过了

  

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

typedef long long int ll;

const int N=100100;

int n,K;
ll h[N],sum[N],path[N],ans[N];

int main()
{
	cin>>n>>K;
	sum[1]=1; 
	int maxl=1;
	for(int i=1;i<=n;i++)
	{
		cin>>h[i];
		sum[i]=1;
		for(int j=max(1,i-600);j<i;j++)
		{
			if(abs(h[j]-h[i])>=K&&sum[j]+1>sum[i])
			{
				sum[i]=sum[j]+1;
				path[i]=j;//下一个是j
			}
			if(sum[i]>sum[maxl])
			{
				maxl=i;
			}
		}
	}
	cout<<sum[maxl]<<endl;
	int T=path[maxl];
	int cnt=0;
	ans[cnt]=maxl;
	while(T)
	{
		ans[++cnt]=T;
		T=path[T];
	}
	for(int i=cnt;i>=0;i--){
		cout<<ans[i]<<" ";
	}
	return 0;
}

Codeforces 474E Pillars(论数据的重要性)

原文:http://blog.csdn.net/u013076044/article/details/42319839

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!