仅供参考
【题目大意】
- 第 1 题 背包问题:已知一个载重为 M 的背包和 n 件物品,第 i 件物品的重量为 wi,如果将第 i 件物品全部装入背包,将有收益 pi,这里,wi>0,pi>0,0 i<n。所谓背包问题是指求一种最佳装载方案,使得收益最大。
输入:第一行物品个数 n 和背包载重 M,以下 n 行输入物品编号 i,物品收益 pi,物品重量 wi。
输出: x1,x2,…,xn,… xi ,i<n,每个 xi 是第 i 件物品装入背包中的部分(小数位保留二位)。
【题意与思路分析】
- 题目分析:
根据题目,我们可以知道,每一个物品不必所有的都装进这个背包里面,同时小数点需要保持两位。 - 思路分析:
我们采用贪心的方案,计算出每个物品的平均价值,然后根据贪心的思想,肯定是平均价值高的就是优先拿走,直到拿完了。最后我们就可以得出每个物品的取用的情况了。
【程序代码】
#include<bits/stdc++.h>
using namespace std;
struct node{
int index; // 表示这个物品的初始的下标
double value; // 表示这个物品的价值
double weight; // 表示这个物品的重量
double pre; // 表示这个物品的平均重量价值
bool operator <(const node &a) const {
return pre>a.pre;
}
}Node[100010];
double ans[100010];
int main(){
int n,total;
cin>>n>>total;
for(int i=1;i<=n