码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 5248 序列变换->二分代价+贪心

时间:2015-05-31 23:17:24      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   编程   

分析:二分代价,由于序列是单增的,我们使前面一个数相对取最小,这样后面的数变化的值也能相对较小(贪心)。

#include<iostream>
using namespace std;

#define N 100010
#define max(a,b) ((a)>(b)?(a):(b))
int num[N],tmp[N],n;

bool valid(int cost)
{
	int i;

	for(i=1;i<=n;i++)
		tmp[i]=num[i];
	tmp[1]=tmp[1]-cost;
	for(i=2;i<=n;i++)
		if(num[i]+cost<=tmp[i-1])
			return false;
		else
			tmp[i]=max(num[i]-cost,tmp[i-1]+1);
	return true;
}

int main()      
{
	int T,t,l,r,ans,mid,i;

	cin>>T;
	t=0;
	while(T--)
	{
		cin>>n;
		for(i=1;i<=n;i++) cin>>num[i];

		ans=0;
		l=0;
		r=1000000;
		while(l<=r)                      //二分代价
		{
			mid=(l+r)>>1;
			if(valid(mid))
			{
				ans=mid;
				r=mid-1;
			}
			else
				l=mid+1;
		}
		cout<<"Case #"<<++t<<":"<<endl;
		cout<<ans<<endl;
	}
    return 0;      
}


HDU ACM 5248 序列变换->二分代价+贪心

标签:c   c++   acm   算法   编程   

原文地址:http://blog.csdn.net/a809146548/article/details/46293235

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!