zoukankan      html  css  js  c++  java
  • P2948 [USACO09OPEN]滑雪课Ski Lessons

    题意:Bessie去滑雪,限时T,滑雪场有S节课

       每节课开始于$m_i$,长度为$l_i$,可以将Bessie的能力值变成$a_i$(注意是变成不是增加)

       有n个滑雪坡,去滑雪需要$c_i$的能力,并且耗时$d_i$

       问Bessie最多能滑几次雪

    一看这么多变量,很显然就是DP啦(只是不会而已

    变量:时间,课程,坡,能力,次数(额,咋设状态呢。。。。)

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define int long long
    #define olinr return
    #define _ 0
    #define love_nmr 0
    #define DB double
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')
                f=-f;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^48);
            ch=getchar();
        }
        return x*f;
    }
    inline void put(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>9)
            put(x/10);
        putchar(x%10+'0');
    }
    int t;
    int s;
    int n;
    int f[10505][105];    //f[i][j]表示到i时刻,能力值为j的最多滑雪次数
    int ks[10505][150];     //ks[i][j]表示在i时刻结束,获得j能力的课程的最晚开始时间
    int g[10505];         //g[i]表示到i时刻的最多滑雪次数           
    int st[105];          //st[i]表示能力值>=i的最短滑雪时间
    signed main()
    {
        t=read();
        s=read();
        n=read();
        for(int a,b,c,i=1;i<=s;i++)   //预处理ks
        {
           a=read();
           b=read();
           c=read();
           ks[a+b-1][c]=max(ks[a+b-1][c],a);
        }
        memset(st,0x3f,sizeof st);
        for(int a,b,i=1;i<=n;i++)   //预处理st
        {
            a=read();
            b=read();
            for(int j=100;j>=a;j--)
                st[j]=min(st[j],b);
        }
        memset(f,-0x3f,sizeof f);    //初始值
        f[0][1]=g[0]=0;              //初始能力为1
        for(int i=1;i<=t;i++)
            for(int j=1;j<=100;j++)
            {
                f[i][j]=f[i-1][j];         //啥也不干QAQ
                if(ks[i-1][j]) f[i][j]=max(f[i][j],g[ks[i-1][j]]);    //表示在前一分钟刚刚上完课,niubi了
                if(i-st[j]>=0) f[i][j]=max(f[i][j],f[i-st[j]][j]+1);  //去滑雪
                g[i]=max(g[i],f[i][j]);      //每次更新
            }
        put(g[t]);
        olinr ~~(0^_^0)+love_nmr;
    }
  • 相关阅读:
    RUST实践.md
    redis.md
    opencvrust.md
    aws rds can't connect to mysql server on 'xx'
    Foundation ActionScript 3.0 With Flash CS3 And Flex
    Foundation Flash Applications for Mobile Devices
    Flash Mobile Developing Android and iOS Applications
    Flash Game Development by Example
    Actionscript 3.0 迁移指南
    在SWT中非UI线程控制界面
  • 原文地址:https://www.cnblogs.com/olinr/p/9579119.html
Copyright © 2011-2022 走看看