您的位置:首页 > 其它

01背包问题

2014-08-07 09:58 197 查看

ProblemDescription

一个旅行者有一个最多能装M公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...Cn,求旅行者能获得最大总价值。

Input

输入有多组数据,对于每组输入数据第1行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);

第2行至N+1行:每行两个整数Wi,Ci,表示每个物品的重量和价值。

Output

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

SampleInput

104
21
33
45
79


SampleOutput

12


[code]#include<cstdio>
#include<iostream>
usingnamespacestd;
intmain()
{
//freopen("a.txt","r",stdin);
intm,n;
while(cin>>m>>n)
{
intw[35],c[35],f[205][35]={0},i,j;
for(i=0;i<n;i++)
cin>>w[i]>>c[i];
for(i=0;i<n;i++)
for(j=m;j>0;j--)
if(w[i]<j)
{
if(f[j][i-1]>f[j-w[i]][i-1]+c[i])
f[j][i]=f[j][i-1];
else
f[j][i]=f[j-w[i]][i-1]+c[i];
}
else
f[j][i]=f[j][i-1];
cout<<f[m]
<<endl;
}
return0;
}


//二维数组,参考ruruoran[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: