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];
    }
  • 相关阅读:
    纪念Google Reader—Google Reader的最后一天
    SlickEdit 18.0 版本发布 同时更新破解文件
    Linux设置中文的man手册
    Android按钮单击事件的五种实现方式
    使用VBS脚本语音朗读文字
    JavaGUI设置windows主题外观
    EL表达式
    自己封装的一个Ajax小框架
    微信公众号清除内存缓存
    墨刀编辑微信端 原型设计
  • 原文地址:https://www.cnblogs.com/tpgzy/p/8919983.html
Copyright © 2011-2022 走看看