zoukankan      html  css  js  c++  java
  • hdu3033(变形分组背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3033

    题意:Iserlohn要买鞋,有k种牌子,每种牌子至少买一双鞋子。每双鞋子有标价跟实际价值。求用m多的钱买最多价值的鞋。

    分析:分组背包是有k组物品,每组至多取一件或不取,用容量为v的背包装最多价值的物品。而这题是至少每组取一件。

    状态方程dp[k][m] 表示已经买了k种鞋 在有m钱状态下的鞋的最大价值。

    为了满足至少每组取一件,则加了这组状态转移方程:

    if(dp[k-1][j-b[i]]+c[i]!=-1)dp[k][j]=max(dp[k][j],dp[k-1][j-b[i]]+c[i]);

    初始化dp数组为-1很重要,若dp[k][j]=-1,说明该种状态无法达到。

    dp[0]全部置为0,就是为了满足第一种能一定在v体积范围内一定取得到,同样只要剩余的空间满足第二种物品体积,那么它也会一定取得道,这样每种种物品第一件会把dp[k]数组更新为一遍,所以当该种物品还有多件物品时,就可用01背包取或不取来进行决策。即

    if(dp[k][j-b[i]]!=-1)dp[k][j]=max(dp[k][j],dp[k][j-b[i]]+c[i])

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <cstdlib>
    #include <vector>
    #include <set>
    #include <map>
    #define LL long long
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define N 10010
    using namespace std;
    int dp[15][N],a[110],b[110],c[110];
    int main()
    {
        int n,m,kind;
        while(scanf("%d%d%d",&n,&m,&kind)>0)
        {
            for(int i=1;i<=n;i++)
                scanf("%d%d%d",&a[i],&b[i],&c[i]);
            memset(dp,-1,sizeof(dp));
            memset(dp[0],0,sizeof(dp[0]));
            for(int k=1;k<=kind;k++)
            for(int i=1;i<=n;i++)if(a[i]==k)
            for(int j=m;j>=b[i];j--)
            {
                if(dp[k][j-b[i]]!=-1)dp[k][j]=max(dp[k][j],dp[k][j-b[i]]+c[i]);
                if(dp[k-1][j-b[i]]!=-1)dp[k][j]=max(dp[k][j],dp[k-1][j-b[i]]+c[i]);
            }
            if(dp[kind][m]==-1)puts("Impossible");
            else printf("%d
    ",dp[kind][m]);
        }
    }
    View Code
  • 相关阅读:
    ASP.NET Core多环境配置文件问题
    .NET Core中Object Pool的简单使用
    Refit在ASP.NET Core中的实践
    HttpClientFactory与Steeltoe结合来完成服务发现
    用HttpClientFactory来实现简单的熔断降级
    看看.NET Core几个Options的简单使用
    再探Circuit Breaker之使用Polly
    谈谈Circuit Breaker在.NET Core中的简单应用
    在.NET Core中使用简单的插件化机制
    谈谈ASP.NET Core中的ResponseCaching
  • 原文地址:https://www.cnblogs.com/lienus/p/4151030.html
Copyright © 2011-2022 走看看