算法提高之二维费用的背包问题
-
核心思想:二维01背包
- 每个物品只能用一次 所以是01背包模板
- 用f[j][k] 表示第一维费用不超过V 第二维费用不超过M的方案
-
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int f[N][N];int n,V,M;int main(){cin>>n>>V>>M;for(int i=0;i<n;i++){int v,m,w;cin>>v>>m>>w;for(int j=V;j>=v;j--)for(int k=M;k>=m;k--) //01背包还是倒着循环f[j][k] = max(f[j][k],f[j-v][k-m] + w);}cout<<f[V][M]<<endl;}