zoukankan      html  css  js  c++  java
  • hdu 4501 小明系列故事——买年货 多重背包

    我们设置一个dp[j][r][x]表示花j元,r积分,免费拿x次所得的最大价值。那么dp[j][r][x]=Max(dp[j-a[i]][r][x],dp[j][r-b[i]][x],dp[j][r][x-1]);

    这里最坑爹的是尽然有0元物品与0积分物品,害的我WA了好几次。所有要用一个temp来记录最大值,最后再赋值给dp[j][r][x];

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    using namespace std;
    #define Max(a,b) (a)>(b)?(a):(b)
    int dp[110][110][6];
    int a[110],b[110],val[110];
    int main()
    {
        int n,m,i,j,k,t,v1,v2,r,x;
        while(scanf("%d%d%d%d",&n,&v1,&v2,&k)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)
                scanf("%d%d%d",&a[i],&b[i],&val[i]);
            int temp=0;
            for(i=1;i<=n;i++)
            {
                for(j=v1;j>=0;j--)
                    for(r=v2;r>=0;r--)
                        for(x=k;x>=0;x--)
                        {
                            temp=0;
                            if(x>=1)
                            temp=Max(temp,dp[j][r][x-1]+val[i]);
                            if(r>=b[i])
                            temp=Max(temp,dp[j][r-b[i]][x]+val[i]);
                            if(j>=a[i])
                            temp=Max(temp,dp[j-a[i]][r][x]+val[i]);
                            dp[j][r][x]=Max(temp,dp[j][r][x]);
                        }
            }
            printf("%d\n",dp[v1][v2][k]);
        }
        return 0;
    }
  • 相关阅读:
    hdu 2106 decimal system
    00-自测4. Have Fun with Numbers (20)
    07-图4. Saving James Bond
    hdu 2209 翻纸牌游戏
    hdu 1272 小希的迷宫
    1969 Pie
    怎样维护 SQLite
    Navicat使用亮点
    Navicat for MySQL 11 Mac安装教程
    Navicat for PostgreSQL 运算符有哪些类别
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3102836.html
Copyright © 2011-2022 走看看