您的位置:首页 > 其它

最大价值

2013-11-20 21:19 197 查看


Problem Description

设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。


Input

输入数据有多组,每一组的第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30),第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。


Output

对于每组数据输出仅一行,一个数,表示最大总价值。


Sample Input

10  4
2  1
3  3
4  5
7  9



Sample Output

max=12

//   解题报告:简单完全背包问题

//标程:

#include<stdio.h>
#include<string.h>
struct ss
{
int x,y;
}p[50];
int main()
{
//freopen("a.txt","r",stdin);
int dp[1000],n,m,i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<m;i++)  scanf("%d%d",&p[i].x,&p[i].y);
memset(dp,0,sizeof(dp));
for(i=0;i<m;i++)
for(j=0;j<p[i].x;j++)
for(k=j+p[i].x;k<=n;k+=p[i].x)
if(dp[k]<dp[k-p[i].x]+p[i].y) dp[k]=dp[k-p[i].x]+p[i].y;
printf("max=%d\n",dp
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: