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;
    }
  • 相关阅读:
    H.Playing games
    P4721 【模板】分治 FFT
    hdu5730 分治fft
    hdu6394Tree lct
    bzoj2763: [JLOI2011]飞行路线 最短路
    bzoj2154: Crash的数字表格 莫比乌斯反演
    bzoj3211: 花神游历各国 线段树
    溢流
    css控制继承
    “<textarea>”内的文字对齐
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3102836.html
Copyright © 2011-2022 走看看