• bzoj 1571: [Usaco2009 Open]滑雪课


    http://www.lydsy.com/JudgeOnline/problem.php?id=1571

    dp[i][j]表示前i个时间,能力为j所能达到得最大滑雪次数

    预处理出,需要能力$<=c$的滑坡滑行的最少时间的坡花费的时间

    dp转移,三种情况

    1 喝coco汁

    2 滑雪

    3 学习课程

    具体看代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    const int maxn = 10007; 
    int t,s,n;
    inline int read() {
        int x=0;char c=getchar();
        while(c<'0'||c>'9') c=getchar();
        while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar();
        return x;
    }
    struct node{
        int s,t,val;
    }cla[maxn];
    struct ppop {
        int c,d;
    }po[maxn];
    int dp[maxn][107];
    int b[maxn];
    int main() {
        t=read(),s=read(),n=read();int st=0;
        for(int i=1;i<=s;++i) {
            cla[i].s=read(),cla[i].t=read(),cla[i].val=read();
            st=std::max(st,cla[i].val);
        }
        std::memset(b,0x3f,sizeof b);
        for(int i=1;i<=n;++i) {
            po[i].c=read(),po[i].d=read();
            b[po[i].c]=std::min(b[po[i].c],po[i].d);
        }
        for(int i=1;i<=st;++i) b[i]=std::min(b[i],b[i-1]);
        for(int i=0;i<=t;++i) {
            for(int j=1;j<=st;++j) {
                dp[i][j]=-11101001;
            }
        }
        dp[0][1]=0;
        for(int i=0;i<=t;++i) {
            for(int j=1;j<=st;++j) {                //the stution have not be down
                if(dp[i][j]<0)continue;
                dp[i+1][j]=std::max(dp[i][j],dp[i+1][j]);//drink coco;
                if(i+b[j]<=t)//the time of ski
                    dp[i+b[j]][j]=std::max(dp[i+b[j]][j],dp[i][j]+1);
                for(int k=1;k<=s;k++)// study
                    if(i>=cla[k].s&&i+cla[k].t<t)
                        dp[i+cla[k].t][cla[k].val]=std::max(dp[i+cla[k].t][cla[k].val],dp[i][j]);
            }
        }
        int ans=0;
        for(int i=1;i<=st;++i) {
            ans=std::max(ans,dp[t][i]);
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    51nod 1416 两点 dfs
    Codeforces Round #424 (Div. 2) A-C
    Codeforces Round #423 (Div. 2) A-C
    Codeforces Round #422 (Div. 2) A-C
    HDU 6077 Time To Get Up 模拟
    51nod 1381 硬币游戏 概率
    51nod 1100 斜率最大 计算几何
    hihocoder 1287 : 数论一·Miller-Rabin质数测试 大质数判定
    字典树
    数论
  • 原文地址:https://www.cnblogs.com/sssy/p/8119668.html
Copyright © 2020-2023  润新知