1175.开心的金明 01背包
Posted guanwen769aaaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1175.开心的金明 01背包相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
#include<bits/stdc++.h> using namespace std; int a[30050],b[30050]; int mp[30050]; int n,i,tmp,m,j; int main() { while(scanf("%d %d",&n,&m)!=EOF) { memset(mp,0,sizeof(mp)); for(i=1;i<=m;i++) { scanf("%d %d",&a[i],&b[i]); } //m[i][j] 表示在面对第i件物品,且背包容量为 j时所能获得的最大价值 // //时间复杂度O(N * M),空间复杂度也为O(N * M) // for(i=1;i<=m;i++)//物品 // { // for(j=0;j<=n;j++)//资源 // { // if(j>=a[i])mp[i][j]=max(mp[i-1][j],mp[i-1][j-a[i]]+a[i]*b[i]); // else mp[i][j]=mp[i-1][j]; // } // // } //空间复杂度也为O(N) for(i=1;i<=m;i++)//物品 { for(j=n;j>=0;j--)//钱数 {//利用滚动数组求背包问题最合适的值 if(j-a[i]>=0) mp[j]=max(mp[j],mp[j-a[i]]+a[i]*b[i]); } } cout<<mp[n]<<endl; } return 0; }
---恢复内容结束---
以上是关于1175.开心的金明 01背包的主要内容,如果未能解决你的问题,请参考以下文章