hdu 4105 貪心思想

淋漓盡致的貪心思想

波谷一定是一位數,波峯一位數不夠大的時候添加到兩位數就一定夠大了的。

當在尋找波谷碰到零了就自然當成波谷。

當在尋找波峯時碰到零時,將前面的波谷加到前一個波峯上,讓當前的零做波谷,使得波谷的值儘量小,這就是本題最關鍵的貪心思想,一直想不到。


代碼中: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;
}


發佈了46 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章