部分背包问题
发布时间: 2017年5月24日 22:53 最后更新: 2017年6月6日 22:12 时间限制: 1000ms 内存限制: 128M
给定一个最大容量为M公斤的背包和N种食品,有食盐白糖大米等。已知第i种食品价值为每公斤Vi元 , 有Wi公斤,编程确定一个方案 使背包中食品总价值最大
输入m,n
n种食品的Vi,Wi
1<= m , n <=1000
1<= Wi,Vi <=1000
背包的最大价值
复制
3 3 10 3 20 4 5 4
60
#include<stdio.h>
#include<algorithm>
using namespace std;
struct list
{
int v;
int w;
};
bool cmp(struct list a,struct list b)
{
return a.v>b.v;
}
int main()
{
int m,n;
struct list an[1005];
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++)
scanf("%d%d",&an[i].v,&an[i].w);
sort(an,an+n,cmp);
int sum=0;
for(int i=0;i<n;i++)
{
if(an[i].w>=m)
{
sum+=an[i].v*m;
break;
}
else
{
sum+=an[i].v*an[i].w;
m-=an[i].w;
}
}
printf("%d",sum);
return 0;
}