首页 > 其他 > 详细

【洛谷p1507】NASA的食物计划

时间:2019-03-10 19:28:03      阅读:231      评论:0      收藏:0      [点我收藏+]

(一次a……)

NASA的食物计划【传送门】

好的上算法标签:

技术分享图片嗯这是个二维背包

 


 

(万年不变分隔线)

二维的题就是在一维基础上增加了一个条件,这个背包不仅含有质量还有体积。所以我们增加一层循环。核心算法:

    for(int i=1;i<=n;i++)
        for(int j=m;j>=zl[i];j--)
            for(int k=v;k>=tj[i];k--)
                f[i][j][k]=max([f[i-1][j][k],f[i-1][j-m1[i]][k-v1[i]]+c[i]);

降二维节省空间:

  for(int i=1;i<=n;i++)
        for(int j=m;j>=zl[i];j--)
            for(int k=v;k>=tj[i];k--)
                f[j][k]=max([f[j][k],f[j-m1[i]][k-v1[i]]+c[i]);

好的扯回原题:nasa的食物计划

ac代码如下:(懒得写解释)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int v,m;
int n;
int tj[1000],zl[1000],dgc[1000];
int f[5001][5001];
int main()
{
    cin>>v>>m>>n;
    for(int i=1;i<=n;i++)
    cin>>tj[i]>>zl[i]>>dgc[i];
    for(int i=1;i<=n;i++)
        for(int j=m;j>=zl[i];j--)
            for(int k=v;k>=tj[i];k--)
                f[j][k]=max(f[j][k],f[j-zl[i]][k-tj[i]]+dgc[i]);
    cout<<f[m][v];
}

 

【洛谷p1507】NASA的食物计划

原文:https://www.cnblogs.com/zhuier-xquan/p/10506517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!