觉得没必要再去粘题目了,大家搞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; }
HDU2187--悼念512汶川大地震遇难同胞——老人是真饿了
时间: 2024-11-08 21:53:50