【USACO2009 Open】滑雪课程 Ski Lessons

Time Limit: 1000 ms
Memory Limit: 131072 KBytes

Description

约翰请贝西去科罗拉多去滑雪。不过贝西不太会玩,她只是个滑雪能力为1的渣渣。所以她决心参加一些滑雪课程。滑雪场提供S门课程,第i门课开始的时间是Mi,持续时间为Li ,上完课之后,贝西的滑雪能力将变成Ai。注意,能力不是增加Ai,而是变成Ai。

滑雪场有N条斜坡,第i条斜坡滑行一次需要Di 分钟,要求游客的滑雪能力达到Ci或以上时才能进入。

贝西可以随意安排她的时间:滑雪、上课,或美美地喝上一杯可可汁,但她在滑雪场只能呆到第T分钟。请问她如何安排时间,滑行次数才能尽量多?

Input

第一行:三个用空格分开的整数:T,S和N,1 ≤ T ≤ 10^4,1 ≤ S ≤ 100,1 ≤ N ≤ 10^5

第二行到S + 1行:第i + 1行描述了第i门课程,分别为Mi,Li 和Ai,彼此用空格隔开,1 ≤ Mi , Li ≤ 10^4,1 ≤ Ai ≤ 100

第S + 2行到S + N + 1行:第S + i + 1行描述了第i条斜坡,分别为Ci和Di ,彼此用空格隔开,1 ≤ Ci ≤ 100,1 ≤ Di ≤ 10^4

Output

第一行:单个整数,表示在时限内贝西可以滑完的最大次数

Sample Input

 10 1 2

 3 2 5

 4 1

 1 3

Sample Output

 6

Hint

先滑 1 次 2 号斜坡,然后去上课,再去 1号连滑 5 次,一共 6 次

我实在太弱...这题做了特别久

这其实是一道简单的dp,首先状态f[i][j] 表示到第i个时刻贝茜的能力值为j时能滑的最大次数

接下来,转移,这时候有三种转移方式:1、美美地给自己倒一杯卡布奇诺(不要问我哪来的卡布奇诺) 2、上课长知识  3、就剩滑冰了吧

这样我们就可以得到一个转移方程:

(1<=k<=j)最后一个转移应为f[i-tn[j]][j]+1

那么肯定有人要问l[i][j]是什么,tn[j]又是什么,其实l[i][j]就是到第i时刻上课已经结束能得到j能力值的课程开始的最晚时刻,tn[j]就是能力值为j时滑一次雪所需的最短时间(一个小贪心)

嗯~~~看起来这样就可以A掉这题了

其实

不然

如果我们枚举k,那么就会T掉,所以我们可以加一个数组g[i],在dp过程中顺便记录下每个时刻f[i][k]的最大值来优化这个方程,这样就可以完美将其解决掉了OwO

什么?没听懂?下面是代码

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int l[][],tn[],f[][],g[];
int main()
{
int t,s,n,st,ai,ei;
memset(f,,sizeof(f));
memset(g,,sizeof(g));
memset(tn,,sizeof(tn));
scanf("%d%d%d",&t,&s,&n);
for (int i=;i<=s;i++){
scanf("%d%d%d",&st,&ai,&ei);
l[st+ai][ei]=max(l[st+ai][ei],st);
}
int c,d;
for (int i=;i<=n;i++){
scanf("%d%d",&c,&d);
for (int j=c;j<=;j++)
tn[j]=min(tn[j],d);
}
f[][]=;
for (int i=;i<=t;i++)
for (int j=;j<=;j++){
f[i][j]=f[i-][j];
if (l[i][j]) f[i][j]=max(f[i][j],g[l[i][j]]);
if (i>=tn[j]) f[i][j]=max(f[i][j],f[i-tn[j]][j]+);
g[i]=max(g[i],f[i][j]);
}
printf("%d",g[t]);
return ;
}

【USACO2009 Open】滑雪课程ski的更多相关文章

  1. [USACO2009 OPEN] 滑雪课 Ski Lessons

    洛谷P2948 看到题目就觉得这是动规但一直没想到如何状态转移……看了别人的题解之后才有一些想法 f[i][j]:前i单位时间能力值为j可以滑的最多次数 lessons[i][j]:结束时间为i,获得 ...

  2. BZOJ 1571: [Usaco2009 Open]滑雪课Ski

    Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...

  3. bzoj千题计划156:bzoj1571: [Usaco2009 Open]滑雪课Ski

    http://www.lydsy.com/JudgeOnline/problem.php?id=1571 DP不一定全部全状态转移 贪心的舍去一些不合法的反而更容易转移 在一定能力范围内,肯定滑雪所需 ...

  4. 【BZOJ】1571: [Usaco2009 Open]滑雪课Ski

    [算法]动态规划 [题解]yy出了O(1w log 1w)的算法. 将雪坡排序预处理出g[i]表示能力值为i的最短时长雪坡. 这样就可以定义work(t,c)表示时长t能力c的最多滑雪数量,work( ...

  5. 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski

    还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...

  6. [bzoj1571][Usaco2009 Open]滑雪课Ski

    题目描述 Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S<=100 ...

  7. BZOJ——1571: [Usaco2009 Open]滑雪课Ski

    http://www.lydsy.com/JudgeOnline/problem.php?id=1571 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit:  ...

  8. bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】

    参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...

  9. 1571. [Usaco2009 Open]滑雪课Ski

    传送门 可以想到 $dp$,设 $f[i][j]$ 表示当前等级为 $i$,时间为 $j$ 的最大滑雪次数 显然上课不会上让自己等级降低的课,所以第一维 $i$ 满足无后效性 然后直接枚举 $i,j$ ...

随机推荐

  1. Trees on the level (二叉链表树)

    紫书:P150 uva122 Background Trees are fundamental in many branches of computer science. Current state- ...

  2. TestNG常用注解

    原文链接:https://www.yiibai.com/testng/basic-annotations.html    以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该 ...

  3. List lambda 排序

    Comparator<PromotionRule> comparator = Comparator.comparing(PromotionRule::getCreatedTime); pr ...

  4. 数论结论 nefu 702

    Given a prime p (p<108),you are to find min{x2+y2},where x and y belongs to positive integer, so ...

  5. 个人常用git命令

    最近开始使用git,将自己常用git命令做一个简单归纳,便于记忆. 初始化及配置 git init:初始化资料库 git config --global user.name 'xxx':配置用户名 g ...

  6. [bzoj1572][Usaco2009 Open]工作安排Job_贪心_堆

    工作安排 Job bzoj-1572 Usaco-2009 Open 题目大意:题目链接. 注释:略. 想法: 我们将任务按照截止时间排序,枚举任务的同时顺便记录出已经做了多少任务(当前时间). 对于 ...

  7. - > 最大公约数(辗转相除法)和最小公倍数(公式法)

    最大公约数 #include<iostream> using namespace std; int a,b; int gcd(int x,int y){ return x==0?y:gcd ...

  8. ASPNET Razor 使用 @Ajax.BeginForm 需要注意到的细节

    创建空的web项目,通过Nuget引用mvc组件来搭建空的MVC项目时, 在视图页面中无法使用@Ajax.BegForm来进行异步提交数据, 而新建默认的MVC模板项目却能够正常使用@Ajax.Beg ...

  9. [Vue-rx] Pass Template Data Through domStreams in Vue.js and RxJS

    domStreams enable you to pass additional data along the stream that can be provided by the template ...

  10. FTPClientUtil FTPclient工具

    package com.ctl.util; //须要commons-net-3.0.1.jar import java.io.*; import java.net.*; import java.uti ...