YTU OJ Problem 3637
YTU OJ Problem 3637 圣诞老人的礼物
题目描述
圣诞节来临了,在城市 A 中,圣诞老人准备分发糖果。现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣诞老人的驯鹿最多只能承受一定重量的糖果,请问圣诞老人最多能带走多大价值的糖果。
输入
输入的第一行由两个部分组成,分别为糖果箱数正整数 n (1 ≤ n ≤ 100), 驯鹿能承受的最大重量正整数 w(0 < w < 10000) , 两个数用空格隔开;其余 n 行每行对应一箱糖果,由两部分正整数 t 和 v 组成,分别为一箱糖果的价值和重量,中间用空格隔开。
输出
输出圣诞老人能带走的糖果的最大总价值,保留 1 位小数。
输入输出样例
样例输入 #1
4 15
100 4
412 8
266 7
591 2
样例输出 #1
1193.0
C++:
#include
#include
#include //C++标准算法库
#define maxn 10000
using namespace std;
typedef struct candy{int weight, value;double average;
}candy;
candy candys[maxn];
bool compare(candy x, candy y){return x.average > y.average;//降序排列
}
int main()
{int n, w;cin >> n >> w;int totalweight = 0;double totalvalue = 0;for (int i = 0; i < n; i++)//贪心:算平均{cin >> candys[i].value >> candys[i].weight;candys[i].average = (double)candys[i].value / candys[i].weight;}sort(candys, candys + n, compare);//sort()函数,默认升序for (int i = 0; i < n; i++){if (totalweight + candys[i].weight <= w){totalweight += candys[i].weight;totalvalue += candys[i].value;}else{totalvalue += (w-totalweight)*candys[i].average;break;}}printf("%.1f", totalvalue);return 0;}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
