• HDU 4501


    超市里有n件他想要的商品。小明顺便对这n件商品打了分,表示商品的实际价值。小明发现身上带了v1的人民币,会员卡里面有v2的积分,而且他能免费拿k件。他想知道他最多能买多大价值的商品。
    由于小明想要的商品实在太多了,他算了半天头都疼了也没算出来,所以请你这位聪明的程序员来帮帮他吧。


    Sample Input
    5 1 6 1 4 3 3 0 3 2 2 3 3 3 3 2 1 0 2 4 2 5 0 0 1 0 4 4 1 3 3 4 3 4 4
     
    Sample Output
    12 4

    思路:将v1,v2,k都当作一种体积,每种物品只能取一次,求max.......

    习惯性的在for中取最小值限制,因为这里导致wa了- -!,大概是因为在多个体积限制的背包里,当这个体积小于它的最小体积时,我们可以让它不去减它的最小体积,而是作为一种状态来传递其他体积的限制的值

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    struct node
    {
        int x1,x2,x3;
    } per[105];
    
    int dp[105][105][110];
    
    int main()
    {
        int n,v1,v2,k;
        while(~scanf("%d%d%d%d",&n,&v1,&v2,&k))
        {
            for(int i = 1; i <= n; i++)
                scanf("%d%d%d",&per[i].x1,&per[i].x2,&per[i].x3);
    
            memset(dp,0,sizeof(dp));
            for(int i= 1; i <= n; i++)
                for(int j = v1; j >= 0; j--)
                    for(int l = v2; l >= 0; l--)
                        for(int q = k; q >= 0; q--)
                        {
                            int maxn= 0;
                            if(j >= per[i].x1 && maxn<dp[j-per[i].x1][l][q]+per[i].x3 )
                                maxn = dp[j-per[i].x1][l][q]+per[i].x3;
    
                            if(l >= per[i].x2 &&maxn< dp[j][l-per[i].x2][q]+per[i].x3)
                                maxn = dp[j][l-per[i].x2][q]+per[i].x3;
    
                            if(q> 0 && maxn < dp[j][l][q-1]+per[i].x3)
                                maxn = dp[j][l][q-1]+per[i].x3;
    
                            if(maxn > dp[j][l][q])
                                dp[j][l][q] = maxn;
                        }
            printf("%d
    ",dp[v1][v2][k]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    20220530 08:00:01
    操作系统:Linux如何获取所有设备信息
    操作系统:设备I/O 如何在内核中注册设备?
    操作系统:设备I/O 设备如何处理内核I/O包
    Selenium(七)分布式
    软件风险分为内部风险和外部风险
    关联用户属性标签表和用户行为权重表
    场景法
    统计品牌销量top10
    《Android 编程权威指南》学习笔记 : 第11章 数据库与 Room 库
  • 原文地址:https://www.cnblogs.com/Przz/p/5409822.html
Copyright © 2020-2023  润新知