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]