P1507 NASA的食物计划

传送

01背包又进化了,它变成了二维背包。

既然它多了一个维度,那么我们的f[j]也变成了二维数组f[i][j],其中i表示费用1,j表示费用2

核心方程也相应的变成了f[i][j]=max(f[i-v1[i]][j-v2[i]],f[i][j]),同时,也多了一层循环

代码如下:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int h,n,m,f[5001][5001],v[51],w[51],o[51];
int main()
{
    cin>>h>>m;
    cin>>n;
    for(int i=1;i<=n;i++)
    {cin>>o[i]>>w[i]>>v[i];
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=h;j>=o[i];j--)
        {
            for(int k=m;k>=w[i];k--)
            {f[j][k]=max(f[j][k],f[j-o[i]][k-w[i]]+v[i]);
            }
        }
    }
    cout<<f[h][m];
}

猜你喜欢

转载自www.cnblogs.com/lcez56jsy/p/10507002.html
今日推荐