01背包

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int m,n;
  4. int w[31],c[31];
  5. int f[2001];
  6. int main(){
  7. scanf("%d%d",&m,&n); //背包容量m 物品数量n
  8. for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]); //每个物品的重量和价值
  9. for(int i=1;i<=n;i++)
  10. for(int j=m;j>=w[i];j--)
  11. if(f[j-w[i]]+c[i]>f[j])
  12. f[j]=f[j-w[i]]+c[i];
  13. printf("%d",f[m]);
  14. return 0;
  15. }

完全背包

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int m,n;
  4. int w[31],c[31];
  5. int f[2001];
  6. int main(){
  7. scanf("%d%d",&m,&n); //背包容量m 物品数量n
  8. for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]); //每个物品的重量和价值
  9. for(int i=1;i<=n;i++)
  10. for(int j=w[i];j<=m;j++)
  11. if(f[j-w[i]]+c[i]>f[j])
  12. f[j]=f[j-w[i]]+c[i];
  13. printf("%d",f[m]);
  14. return 0;
  15. }