HDU2187--悼念512汶川大地震遇難同胞——老人是真餓了

覺得沒必要再去粘題目了,大家搞acm的指導HDU,自然就會到網站上了,

這道題屬於簡單的貪心,本以爲是揹包呢,嚇的我先去看了下揹包。。。唉……自己太水了

現在每次想起本科去參加省賽的情景,看到現在的他們越來越牛,感覺現在還沒人家本科強,唉……

沒辦法,基礎差,只有慢慢練了,只求找到滿意的工作哈!

除了是簡單的貪心,感覺題目有些讀不懂,所以一定要看清題目,輸入的是單價和重量,不要弄混了。。

直接貼自己寫的代碼哈

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
const int MAXN =  1000 + 10;
struct rice{
	int value;
	int weight;
}R[MAXN];
bool cmp(rice a , rice b)
{
	if(a.value < b.value)
		return true;
	if(a.value == b.value)
		return a.weight < b.weight;
	return false;
}
int main()
{
#ifdef LOCAL
	freopen("input.txt" , "r" , stdin);
#endif
	int T;
	cin >> T;
	while(T--)
	{
		double totalWeight = 0;
		int n , m ;
		cin >> n >> m;
		for(int i=0; i<m; ++i)
		{
			cin >> R[i].value >> R[i].weight;
		}
		sort(R, R+m , cmp);
		for(int i=0; i<m; ++i)
		{
			//這點其實不用這麼麻煩的循環,直接判斷就ok
			//ac後就懶得改了,看到博客的,這點就不要借鑑了,哈哈
			while(R[i].weight > 0 && n >= R[i].value)
			{
				totalWeight += 1;
				R[i].weight -= 1;
				n -= R[i].value;
			}
			if(n > 0 && n < R[i].value && R[i].weight > 0)
			{
				totalWeight += ((double)n/(double)R[i].value);
				n = 0;
			}
			if(n == 0)
			{
				//控制小數點後的位數
				cout << fixed <<setprecision(2) << totalWeight << endl;
				break;
			}
		}
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章