目录
题目信息:
题目分析:
题解代码:
题目信息:
注:4指一共有四箱糖果,15指雪橇共能带走的最大重量为15,接下来输出4行,每行两个数据,
第一个数据指这箱糖果的价值,第二个数据指这箱糖果的重量。
题目分析:
这是一道很典型的贪心问题,因为要带走的糖果价值总和最大,且注意可以拆分成散装带走,也就是说当装了整箱糖果后,若剩下的空间不足以再装下一整箱糖果,可以拆分来装,固这题我们首先要求的就是每箱糖果价值与重量的比值,最大的先装,以此类推,到最后装不满一箱时再拆分。
题解代码:
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-6;
struct Candy
{int v; //价值v 重量wint w;bool operator < (const Candy & c) const{return double(v)/w-double(c.v)/c.w > eps; //排序规则:价值重量比大的先装}
}candies[110];
int main()
{int n,w;cin>>n>>w;for(int i=0;i<n;i++) //记录每箱糖果的价值和重量{cin>>candies[i].v>>candies[i].w;}sort(candies,candies+n); //按上面的规则排序int totalW=0;double totalV=0;for(int i=0;i<n;i++){if(totalW + candies[i].w<=w) //若雪橇剩余载重量够装这一整箱{totalW+=candies[i].w;totalV+=candies[i].v;}else //若不够则拆分装{totalV+=candies[i].v*double(w-totalW)/candies[i].w;break;}}printf("%.1f",totalV);return 0;
}
附:样例测试
4 15
100 4
412 8
266 7
591 2