背包问题总结
一: 01背包
状态转移方程
if(j < wet[i])//如果装不下
dp[i][j] = dp[i - 1][j];
else//装的下
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - wet[i]] + val[i]);
51nod 1085 ac代码
#include <iostream>
using namespace std;
int val[110];
int wet[110];
int dp[110][11000];
int main()
{
int n,bagv;
cin>>n>>bagv;
for(int i = 1; i <= n; i++)
cin>>wet[i]>>val[i];
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= bagv; j++)
{
if(j < wet[i])
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - wet[i]] + val[i]);
}
}
cout<<dp[n][bagv]<<endl;
return 0;
}