0/1背包是物体的数量是单一的;而完全背包问题物品的数量是无限的;
#include<iostream>//完全背包问题
using namespace std;
int M,N;//M代表容积,N代表物体的个数;
int m[1000],n[1000];//n代表价值,m代表重量
int dp[1000];
int main(){
cin>>M>>N;
for(int i=1;i<=N;i++)cin>>m[i]>>n[i];
for(int i=1;i<=N;i++){
for(int j=m[i];j<=M;j++){
dp[j]=max(dp[j],dp[j-m[i]]+n[i]);
}
} cout<<dp[M];
return 0;
}
注意0/1背包和完全背包问题压缩式完全相同
0/1:用到的是上一条的旧数据,是逆向推;
完全背包问题:用到的是本条数据即正向推;