题解里面全是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 滑雪课的更多相关文章

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

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

  2. [USACO09OPEN]滑雪课Ski Lessons

    题目描述 Farmer John wants to take Bessie skiing in Colorado. Sadly, Bessie is not really a very good sk ...

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

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

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

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

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

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

  6. P2948 [USACO09OPEN]滑雪课Ski Lessons

    题意:Bessie去滑雪,限时T,滑雪场有S节课 每节课开始于$m_i$,长度为$l_i$,可以将Bessie的能力值变成$a_i$(注意是变成不是增加) 有n个滑雪坡,去滑雪需要$c_i$的能力,并 ...

  7. [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 ...

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

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

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

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

随机推荐

  1. Apache Continuum 远程命令执行漏洞

    这个是apache现在不维护的服务了. 服务使用了struts2框架,目前测试是使用的最新版.

  2. Windows Backdoor Tips

    名称:在用户登录时,运行这些程序 位置: Computer Configuration\\Policies\\Administrative Templates\\System\\Logon\\ 中 d ...

  3. java 多线程系列基础篇(一)

    多线程状态图: Thread类的两个方法比较: yield方法: Yield是一个静态的原生(native)方法 Yield告诉当前正在执行的线程把运行机会交给线程池中拥有相同优先级的线程. Yiel ...

  4. oracle connect by用法篇 (包括树遍历)之二

    3.2查询当前时间往前的12周的开始时间.结束时间.第多少周 , ) - (rownum ) as startDate, sysdate , 'd'))) - (rownum ) as endDate ...

  5. 通过Excel导入Mysql 超过65535条数据的办法

    1.截取 65534条数据,进行分sheet,然后1个sheet导入一张表,最后进行整合! 2.采用TXT导入方式,TXT的导入暂时没发现限制的数据条数,下午用TXT导入74万条数据成功 3.如果遇到 ...

  6. 使用ffmpeg压缩视频

    命令: ffmpeg -i 1.avi -b 64k 1-64k.avi ffmpeg下载:http://dl.pconline.com.cn/download/53703.html

  7. 窗体控件JFrame的使用

    ---------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:MyFrame.java 工程结构目录如下: 在 Source 界面和 Des ...

  8. cocos2dx帧动画

    //帧动画的创建 //方式一,通过多张图片来创建 auto sprite1 = Sprite::create("grossini_dance_05.png"); sprite1-& ...

  9. iBase4J项目笔记

    目录: 1 数据库密码加密 2 service层概述 3 web层概述 4 后端CRUD 4.1 READ 4.2 UPDATE 4.3 CREATE 4.4 DELETE 5 facade层概述 1 ...

  10. WINFORM 开发模式,窗体回到默认样式方法。

    软件分为3类   客户端  网站应用  app WINFORM 主要用来只做客户端应用程序.C/S 客户端程序很重要的特点:可以操作用户电脑上的文件,执行在客户端上,电脑的配置越高执行就越流畅. 在p ...