。。。网上讲解挺详细的,但是都没有代码分析,我根据网上的分析,写了自己的代码,并加了注释
以后再看一遍可以更好理解一点
#include<bits/stdc++.h>
using namespace std;
int dp[105][10005];//i代表i件物品(这i件物品有可能放进去了,有可能没放),j代表当前背包里放的物品的体积
//dp[i][j]表示的是当前最优解
int v[105];
int w[105];
int main()
{
int n,tv;
cin>>n>>tv;
for(int i=1;i<=n;i++)
{
cin>>v[i]>>w[i];//体积对应的重量
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<=tv;j++)
{
if(j>=v[i])//如果当前背包可容纳量比当前的这个物品的体积大,那么这个物品可以放进去
{
dp[i][j]=max(dp[i-1][j-v[i]]+w[i],dp[i-1][j]);//max(放,不放)
}
else//一定放不进去的情况
{
dp[i][j]=dp[i-1][j];
}
}
}
cout<<dp[n][tv]<<endl;//输出n个物品的最优解
return 0;
}
http://www.cnblogs.com/daoluanxiaozi/archive/2012/05/06/2486105.html
这个网址的分析超级喜欢(^-^)