千万不要被题目给误导了,这道题是贪心。
所有金币都可以分开,也就是说只要按照性价比最高的取一定得到的价值最大。
性价比就是这堆金币的价值除以重量。
只需要把这n堆金币按性价比排序就行了。
然后依次遍历,如果背包中剩余可以拿的重量大于等于这堆金币的重量,就全拿,否则直接装满。
直接装满这里注意一下整型转浮点的细节就好了。
代码如下:
#include<cstdio>
#include<algorithm>//用到sort
using namespace std;
struct Node{
//金币结构体
int w,v;//w表示重量,v表示价值
}a[110];
int read(){
//普通的快读,不解释
int x=0,f=1;
char c=getchar();
<