01背包
#include<bits/stdc++.h>
using namespace std;
int m,n;
int w[31],c[31];
int f[2001];
int main(){
scanf("%d%d",&m,&n); //背包容量m 物品数量n
for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]); //每个物品的重量和价值
for(int i=1;i<=n;i++)
for(int j=m;j>=w[i];j--)
if(f[j-w[i]]+c[i]>f[j])
f[j]=f[j-w[i]]+c[i];
printf("%d",f[m]);
return 0;
}
完全背包
#include<bits/stdc++.h>
using namespace std;
int m,n;
int w[31],c[31];
int f[2001];
int main(){
scanf("%d%d",&m,&n); //背包容量m 物品数量n
for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]); //每个物品的重量和价值
for(int i=1;i<=n;i++)
for(int j=w[i];j<=m;j++)
if(f[j-w[i]]+c[i]>f[j])
f[j]=f[j-w[i]]+c[i];
printf("%d",f[m]);
return 0;
}