luogu2948 滑雪课
题解里面全是dp的大神本蒟蒻瑟瑟发抖奉上一篇记忆化搜索...
其实嘛,记忆化搜索还是很安全透彻清真人品的,一般递推不好实现dp可以用记忆化搜索
然后本题先预处理一个mint[i]代表当前能力值为i,参与滑雪的最小时间。一开始赋初值为\(+\infty\),每当读入一个滑雪任务(c,d)后,把[c,100]区间内的数组对d去取一个min
然后就可以缩索了,search(x,y)返回当前时间为x,能力值为y滑雪最大次数。枚举所有课程,如果这个课程开始时间在x后面(或者就在x也就是\(\ge x\),那么我们就用上这门课来更新本次答案,也就是search(a[i].m + a[i].l, a[i].a)。mla如题意。一个剪枝:当当前课程a小于等于当前能力值,选他一定不比不选他优,所以不用考虑。然后贪心地在当前时间x和课程开始时间内滑雪(用当前时间除以当前能力值能滑雪最短时间就是最大滑雪的次数)。
备注:数据貌似有一点水,不写记忆化tle两个点,不写记忆化开O2tle一个点。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
struct course
{
int m, l, a;
}a[110];
int mint[110];
int t, s, n, f[10010][110];
//记忆化缩索,表示在x时候能力值为y能滑雪最大数
int search(int x, int y)
{
if(f[x][y] != -1)
return f[x][y];
f[x][y] = 0;
for (int i = 1; i <= s + 1; i++)
if(a[i].m >= x && a[i].a > y)
f[x][y] = max(f[x][y], search(a[i].m + a[i].l, a[i].a) + (a[i].m - x) / mint[y]);
return f[x][y];
}
int main()
{
scanf("%d%d%d", &t, &s, &n);
for (int i = 1; i <= s; i++)
{
scanf("%d%d%d", &a[i].m, &a[i].l, &a[i].a);
}
a[s + 1] = (course){t, 0, 101};
memset(mint, 0x3f, sizeof(mint));
for (int c, d, i = 1; i <= n; i++)
{
scanf("%d%d", &c, &d);
for (int j = c; j <= 100; j++)
mint[j] = min(mint[j], d);
}
memset(f, -1, sizeof(f));
printf("%d\n", search(0, 1));
return 0;
}
让我们一起膜拜大佬林瑞堂 @olinr
让我们一起膜拜搜索王@ZAGER
luogu2948 滑雪课的更多相关文章
- BZOJ 1571: [Usaco2009 Open]滑雪课Ski
Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...
- [USACO09OPEN]滑雪课Ski Lessons
题目描述 Farmer John wants to take Bessie skiing in Colorado. Sadly, Bessie is not really a very good sk ...
- [bzoj1571][Usaco2009 Open]滑雪课Ski
题目描述 Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S<=100 ...
- 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski
还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...
- BZOJ——1571: [Usaco2009 Open]滑雪课Ski
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- P2948 [USACO09OPEN]滑雪课Ski Lessons
题意:Bessie去滑雪,限时T,滑雪场有S节课 每节课开始于$m_i$,长度为$l_i$,可以将Bessie的能力值变成$a_i$(注意是变成不是增加) 有n个滑雪坡,去滑雪需要$c_i$的能力,并 ...
- [luoguP2948] [USACO09OPEN]滑雪课Ski Lessons(DP)
传送门 f[i][j]表示i时刻能力值为j的最大滑雪数 显然f[0][1]=0,开始搜索 三种转移: ①美美的喝上一杯**:f[i+1][j]=max(f[i+1][j],f[i][j]) ②滑雪,f ...
- 1571. [Usaco2009 Open]滑雪课Ski
传送门 可以想到 $dp$,设 $f[i][j]$ 表示当前等级为 $i$,时间为 $j$ 的最大滑雪次数 显然上课不会上让自己等级降低的课,所以第一维 $i$ 满足无后效性 然后直接枚举 $i,j$ ...
- bzoj千题计划156:bzoj1571: [Usaco2009 Open]滑雪课Ski
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 DP不一定全部全状态转移 贪心的舍去一些不合法的反而更容易转移 在一定能力范围内,肯定滑雪所需 ...
随机推荐
- RVO和NRVO
返回值优化(Return Value Optimization,简称RVO),是这么一种优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用户返回,那么这个临时对象会消耗一个构造函数(C ...
- WebApi学习系列
最近有一些时间,打算学习和整理一下Web API的一些学习资料的翻译工作.以下是对Web API 的大概目录的整理.欢迎更多的朋友一起加入到学习Web API 的队伍中来,如果你想贡献自己的,请联 ...
- Windows条件变量
详细见MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686903%28v=vs.85%29.aspx 我们已经看到,当想 ...
- SUSE 设置IP地址、网关、DNS
说明: ip:172.18.4.107 子网掩码:255.255.255.0 网关:172.18.4.254 dns:172.18.0.6 1.设置ip地址 vi /etc/sysconfig/net ...
- SqlServer——判断对象是否存在
对以下对象判断是否存在:database.table.proc.触发器.临时表.索引.对于这些对象的判断是通过数据表 SysObjects来获得的. 一.基础知识 1.SysObjects系统表 对于 ...
- leetcode230
/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...
- elasticsearch 概念与架构(3)
转自:https://devops.taobao.com/ Node(节点):单个的装有Elasticsearch服务并且提供故障转移和扩展的服务器. Cluster(集群):一个集群就是由一个或多个 ...
- 【转】Android下面打印进程函数调用堆栈(dump backtrace)的方法
1. 为什么要打印函数调用堆栈? 打印调用堆栈可以直接把问题发生时的函数调用关系打出来,非常有利于理解函数调用关系.比如函数A可能被B/C/D调用,如果只看代码,B/C/D谁调用A都有可能,如果打印出 ...
- 使用spring-loaded实现应用热部署
作为一名Java开发者您是否会遇到这种情况:新增一个方法或字段必须重启tomcat才能对其进行调试? 有没有办法使得不重启tomcat就能调试呢.spring-loaded就可以. spring-lo ...
- 重命名File
File completeFile = new File(mFilePath + mFileName); if (completeFile.exists()) { File fileWithSuffi ...