BZOJ 1571 DP
思路:
预处理出在能力值为i的时候 滑雪一次的最小时间
f[i][j]表示i时间 j的能力值 最多的滑雪次数
我先用vector 把课程按起点push进去
1.
for(int k=0;k<vec[i].size();k++){
f[i+vec[i][k].l][vec[i][k].a]=max(f[i+vec[i][k].l][vec[i][k].a],f[i][j]);
}
上课
2.
f[i+1][j]=max(f[i][j],f[i+1][j]);
喝一杯可可汁
3.
f[i+land[j]][j]=max(f[i+land[j]][j],f[i][j]+1);
滑雪
//By SiriusRen
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int t,s,n,land[105],f[20005][105];
struct Course{int m,l,a;}course[10005];
struct Land{int c,d;}jyl;
vector<Course>vec[10005];
int main(){
memset(land,0x3f,sizeof(land));
scanf("%d%d%d",&t,&s,&n);
for(int i=1;i<=s;i++){
scanf("%d%d%d",&course[i].m,&course[i].l,&course[i].a);
vec[course[i].m].push_back(course[i]);
}
for(int i=1;i<=n;i++){
scanf("%d%d",&jyl.c,&jyl.d);
land[jyl.c]=min(land[jyl.c],jyl.d);
}
for(int i=1;i<=100;i++)land[i]=min(land[i],land[i-1]);
memset(f,-1,sizeof(f));
f[0][1]=0;
for(int i=0;i<=t;i++){
for(int j=1;j<=100;j++){
if(f[i][j]==-1)continue;
for(int k=0;k<vec[i].size();k++){
f[i+vec[i][k].l][vec[i][k].a]=max(f[i+vec[i][k].l][vec[i][k].a],f[i][j]);
}
f[i+1][j]=max(f[i][j],f[i+1][j]);
f[i+land[j]][j]=max(f[i+land[j]][j],f[i][j]+1);
}
}
for(int i=1;i<=100;i++)f[t][1]=max(f[t][1],f[t][i]);
printf("%d\n",f[t][1]);
}
BZOJ 1571 DP的更多相关文章
- bzoj 3622 DP + 容斥
LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...
- bzoj 1571: [Usaco2009 Open]滑雪课
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 dp[i][j]表示前i个时间,能力为j所能达到得最大滑雪次数 预处理出,需要能力$<= ...
- bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...
- BZOJ - 1003 DP+最短路
这道题被马老板毒瘤了一下,TLE到怀疑人生 //然而BZOJ上妥妥地过了(5500ms+ -> 400ms+) 要么SPFA太玄学要么是初始化block被卡到O(n^4) 不管了,不改了 另外D ...
- BZOJ 2431 & DP
题意:求逆序对数量为k的长度为n的排列的个数 SOL: 显然我们可以对最后一位数字进行讨论,判断其已经产生多少逆序对数量,然后对于前n-1位同样考虑---->每一个长度的排列我们都可以看做是相同 ...
- bzoj 1791 DP
首先对于一棵树我们可以tree_dp来解决这个问题,那么对于环上每个点为根的树我们可以求出这个树的一端为根的最长链,并且在tree_dp的过程中更新答案.那么我们对于环,从某个点断开,破环为链,然后再 ...
- BZOJ 1571: [Usaco2009 Open]滑雪课Ski
Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...
- bzoj 1592 dp
就是dp啊 f[i][j]表示到第i位,最后一位高度是j的最小花费 转移::f[i][j]=minn(f[i-1][k])+abs(a[i]-num[j]);(k<=j) #include< ...
- BZOJ 1207 DP
打一次鼹鼠必然是从曾经的某一次打鼹鼠转移过来的 以打每一个鼹鼠时的最优解为DP方程 #include<iostream> #include<cstdio> #include&l ...
随机推荐
- studyLink
http://order.csdn.net/myorder/detail?id=850343 csdn
- gitHub上如何设置或者取消电子邮箱提醒
原文链接:点我 我们正常注册的gitHub一般应该都是电子邮箱的方式,在注册账号时可能选择或者默认给了各种提醒,但是gitHub的邮箱提醒真的就比较烦人了,特别是最近团队开发项目,什么动态都有提醒,就 ...
- 《转载》编程入门指南 v1.4
编程入门指南 v1.4 Badger · 8 个月前 作者:@萧井陌, @Badger 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 CoCode ...
- [转载][来自csdn]RTS和CTS是什么意思?
原文链接: http://blog.csdn.net/zmq5411/article/details/6280332 这篇文章看着挺好,明白易懂,顺手转过来 34RTS和CTS是什么意思? 解释一:R ...
- cal---显示日历
cal命令用于显示当前日历,或者指定日期的日历. 语法 cal(选项)(参数) 选项 -l:显示单月输出: -3:显示临近三个月的日历: -s:将星期日作为月的第一天: -m:将星期一作为月的第一天: ...
- [APIO2010]巡逻(树的直径)
[APIO2010]巡逻 题目描述 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到 ...
- ECNUOJ 2613 Gamma 函数
Gamma 函数 Time Limit:1000MS Memory Limit:65536KBTotal Submit:237 Accepted:138 Description Pollux最近在复 ...
- ZooKeeper 特性
ZooKeeper 拥有一个层次的命名空间.(like distributed) 注意:ZooKeeper 中不许使用相对路径. 一 ZooKeeper 数据模型 ...
- BestCoder Round #11 (Div. 2)
太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...
- java基础 this keyword!
为了程序的可读性,通常将一个类中的表示同一属性的变量进行统一的命名.可是这样做又会导致成员变量与局部变量名字冲突导致无法訪问成员变量.为了解决问题,java中引入了this这个keyword!所以th ...