zoukankan      html  css  js  c++  java
  • 二维费用的背包问题

    luogu P1507 NASA的食物计划

    题目背景

    NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安

    全技术问题一直大伤脑筋,因此在各方压力下终止了航天

    飞机的历史,但是此类事情会不会在以后发生,谁也无法

    保证,在遇到这类航天问题时,解决方法也许只能让航天

    员出仓维修,但是多次的维修会消耗航天员大量的能量,

    因此NASA便想设计一种食品方案,让体积和承重有限的

    条件下多装载一些高卡路里的食物.

    思想:多出一个限制条件就增加一维数组

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int f[51][401][401],w[401],u[401],k[401];//W是体积,u是质量,k是卡路里 
    int main()
    {
        int v,m,n;
        scanf("%d%d%d",&v,&m,&n);//v是体积,m是质量 
        for(int i=1;i<=n;++i)
        {
            scanf("%d%d%d",w+i,u+i,k+i);
        }
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=v;++j)
            {
                for(int q=1;q<=m;++q)
                {
                    if(q>=u[i])
                    {
                        if(j>=w[i])
                        {
                            f[i][j][q]=max(f[i-1][j][q],f[i-1][j-w[i]][q-u[i]]+k[i]);
                        }
                        else
                        {
                            f[i][j][q]=f[i-1][j][q];
                        }
                    }
                    else
                    {
                        f[i][j][q]=f[i-1][j][q];
                    }
                }
            }
        }
        cout<<f[n][v][m];
    }

    另一种解法  压维打击

    代码如下

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int f[401][401],w[401],u[401],k[401];
    int main()
    {
        int v,m,n;
        scanf("%d%d%d",&v,&m,&n);//v是体积,m是质量 
        for(int i=1;i<=n;++i)
        {
            scanf("%d%d%d",w+i,u+i,k+i);
        }
        for(int i=1;i<=n;++i)
        {
            for(int j=v;j>=w[i];--j)
            {
                for(int q=m;q>=u[i];--q)
                {
                    f[j][q]=max(f[j][q],f[j-w[i]][q-u[i]]+k[i]);
                }
            }
        }
        cout<<f[v][m];
    }
  • 相关阅读:
    zoj1942Frogger
    阿里云api调用做简单的cmdb
    约瑟夫环
    Bag标签之中的一个行代码实行中文分词实例3
    用lua扩展你的Nginx(整理)
    Single Number III
    TCP/IP ---分层
    TCP/IP --概述
    adb命令学习
    How to set Selenium Python WebDriver default timeout?
  • 原文地址:https://www.cnblogs.com/tpgzy/p/8919983.html
Copyright © 2011-2022 走看看