文章目录
动态规划:状态表示(集合:f(i,j)的含义;属性:求Max(例))+状态计算(如何进行状态转移、计算)
由于仅做复习用,具体推导未详细写出。
一:01背包问题
每个物品有且只有一个。
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
int f[N];
int v[N],w[N];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
{
for(int j=m;j>=v[i];j--) //类似滚动数组原理,j从大到小遍历避免覆盖之前的存值
{
f[j]=max(f[j],f[j-v[i]]+w[i]);//上层状态,必选第i件的情况
}
}
cout<<f[m]<<endl;
return 0