• 完全背包 包粽子


    包粽子,包一个纯面粉的粽子需要c 克面粉,可以卖出 d 块钱

    有m种配料,每种配料可以对应包一种粽子,比如

    第i种配料有a[i]克,包一个该配料的粽子需要配料b[i]克,面粉c[i]克,可以卖出d[i]块钱

    问,有n克面粉,m种配料,最多可以包粽子卖出多少块钱?

    输入第一行为

    n m c d

    表示n克面粉,m种配料,纯面粉粽子需要c克面粉,价值为d

    接下来m行,每行四个数a[i] b[i] c[i] d[i]  ,分别代表该配料的总重量,包一个粽子需要的配料和面粉以及价值

    输入样例:

    10 2 1 1

    6 2 3 50

    8 1 2 10

    输出样例

    151

    完全背包问题

    dp[i][j]   表示使用前 i 种配料,消耗 j 克面粉的情况下的最大价值为dp[i][j]

    转移方程为

    dp[ i ][ j ]=max(dp[ i-1 ][ j ],dp[ i-1 ][ j-k*p[ i ].c ] + k*p[ i ].d );

      

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int dp[20][1005];
    struct node {
        int a, b, c, d;
    }p[20];
    int main()
    {
        int n, m, c0, d0;
        cin >> n >> m >> c0 >> d0;
        //把纯面的粽子当成一种配料处理
        p[0].a = n;
        p[0].b = 0;
        p[0].c = c0;
        p[0].d = d0;
        for (int i = 1; i <= m; i++) {
            cin >> p[i].a >> p[i].b >> p[i].c >> p[i].d;    
        }
        
        for (int j = 0; j < n; j++) {
            dp[0][j] = 0;
        }
        for (int i = 0; i <= m; i++) {
            dp[i][0] = 0;
        }
    
        //前i种粽子
        for (int i = 0; i <= m; i++) {
            //消耗j克面粉
            for (int j = 1; j <=n; j++) {
                //在面粉够用的情况下,最多包k个第i种配料的粽子
                for (int k = 0; k*p[i].c <= j ; k++) {
                    //还要保证配料够
                    if (k*p[i].b <= p[i].a)
                    {
                        dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - k * p[i].c] + k * p[i].d);
                    }
                }
            }
        }
        cout << dp[m][n] << endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    Hystrix容错处理
    Elasticsearch基本命令
    Elasticsearch
    IDEA最新破解方式
    ElasticSearch _bulk批量处理报错The bulk request must be terminated by a newline
    Mysql引擎MyISAM和InnoDB的区别
    利用文件建立与删除swap分区
    新的分区----增加与删除swap分区
    增加,删除分区,不重启更新分区表信息
    将/home迁移到一个独立分区(新的硬盘)中
  • 原文地址:https://www.cnblogs.com/-citywall123/p/13332783.html
Copyright © 2020-2023  润新知