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

hdu 4105 贪心思想

时间:2016-02-20 14:30:28      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

淋漓尽致的贪心思想

波谷一定是一位数。波峰一位数不够大的时候加入到两位数就一定够大了的。

当在寻找波谷碰到零了就自然当成波谷。

当在寻找波峰时碰到零时,将前面的波谷加到前一个波峰上。让当前的零做波谷,使得波谷的值尽量小,这就是本题最关键的贪心思想。一直想不到。


代码中:a表示前一个值,b表示当前考虑的值,tag为偶数时表示正在寻找波谷,奇数时在寻找波峰。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>

using namespace std;

char data[5999];

int main()
{
	int n, m, k;

	while(scanf("%d", &n) != EOF)
	{
		scanf("%s", data);
		//cout<<data<<endl;
		int a, b, tag = 0;
		a = 11;
		b = 0;
		int ans = 0;
		for(int i = 0; i < n; i ++)
		{
			b = (data[i] - '0');
			if(tag % 2 == 0){
				if(b < a){		
					a = b;
				}
				else
				{	
					i ++;
					a = data[i]-'0';
				}
			}
			else
			{
				if(b > a)
				{
					a = b;
				}
				else
				{
					if(b == 0)
					{
						while(data[i] == '0'){
							i ++;
							if(i >= n) break;	
						}
						//贪心思想,有0就一定让他做波谷,把原先的波谷a给到他的前一个波峰上
						a = 0;	//0做波谷 
						b = data[i]-'0';
						a = b;
					}
					else
					{
						i ++;
						a = b*10 + (data[i] - '0');
					}
				}
			}
			if(i >= n) break;
			ans ++; tag ++;
		}
		printf("%d\n", ans-1);		
	}
	
	return 0;
}


hdu 4105 贪心思想

标签:

原文地址:http://www.cnblogs.com/yxwkf/p/5203145.html

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