zoukankan      html  css  js  c++  java
  • P1833 樱花

    题目背景

    《爱与愁的故事第四弹·plant》第一章。

    题目描述

    爱与愁大神后院里种了n棵樱花树,每棵都有美学值Ci。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍过,一种樱花树最多看Ai遍,一种樱花树可以看无数遍。但是看每棵樱花树都有一定的时间Ti。爱与愁大神离去上学的时间只剩下一小会儿了。求解看哪几棵樱花树能使美学值最高且爱与愁大神能准时(或提早)去上学。

    输入输出格式

    输入格式:

    共n+1行:

    第1行:三个数:现在时间Ts(几点:几分),去上学的时间Te(几点:几分),爱与愁大神院子里有几棵樱花树n。

    第2行~第n+1行:每行三个数:看完第i棵树的耗费时间Ti,第i棵树的美学值Ci,看第i棵树的次数Pi(Pi=0表示无数次,Pi是其他数字表示最多可看的次数Pi)。

    输出格式:

    只有一个整数,表示最大美学值。

    输入输出样例

    输入样例#1: 复制
    6:50 7:00 3
    2 1 0
    3 3 1
    4 5 4
    输出样例#1: 复制
    11

    说明

    100%数据:Te-Ts ≤ 1000,n ≤ 10000

    样例解释:赏第一棵樱花树一次,赏第三棵樱花树2次

    //一个01背包、多重背包和完全背包的混合。
    //在进行到第i棵树的时候,对它进行判断,判断属于哪一种背包
    //然后根据它所属的类型做背包 
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    using namespace std;
    char s;
    int a,b,c,d,n,tim;
    struct tree
    {
        int t,c,p;
    }t[205];
    int dp[205];
    int main()
    {
        scanf("%d%c%d%c%d%c%d%c",&a,&s,&b,&s,&c,&s,&d,&s);
        tim=(c-a)*60-b+d;        //计算时间 
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&t[i].t,&t[i].c,&t[i].p);
        }
        for(int i=1;i<=n;i++)
        {
            if(t[i].p==0)        //完全背包 
            {
                for(int j=t[i].t;j<=tim;j++)
                {
                    //for(int i=)
                    dp[j]=max(dp[j],dp[j-t[i].t]+t[i].c);
                }
            }
            else if(t[i].p==1)        //01背包 
            {
                for(int j=tim;j>=t[i].t;j--)
                {
                    dp[j]=max(dp[j],dp[j-t[i].t]+t[i].c);
                }
            }
            else    //多重背包 
            {
                for(int j=tim;j;j--)
                {
                    for(int k=1;k<=t[i].p&&j-k*t[i].t>=0;k++)    //从1开始正序枚举,一开始写的倒序,WA了 
                    {
                        dp[j]=max(dp[j],dp[j-t[i].t*k]+t[i].c*k);
                    }
                }
            }
        }
        //printf("%d
    ",tim);
        printf("%d",dp[tim]);
        return 0;
    }
  • 相关阅读:
    lightoj1027_数学求期望
    lightoj1232_完全背包
    2013 ACM/ICPC Asia Regional Chengdu Online
    数位DP专题
    状态压缩DP专题
    树形DP专题
    hdu 1198 Farm Irrigation
    hdu 4739 Zhuge Liang's Mines 2013 ACM/ICPC Asia Regional Hangzhou Online
    hdu 4745 Two Rabbits 2013 ACM/ICPC Asia Regional Hangzhou Online
    动态规划专题uva
  • 原文地址:https://www.cnblogs.com/lovewhy/p/8717695.html
Copyright © 2011-2022 走看看