题目链接

题目链接

题解

\(f[i][j]\)表示位置\((i,j)\)到达需要的最小点击数。

\(f[i][j]=\min\{{f[i-1][j-kx]+k},f[i-1][j+y]\}\)

\(O(nm^2)\)

考虑优化,首先\(f\)可以滚动,然后考虑优化掉一个\(m\)。

设\(g[j]\)表示\((i-1,j)\)往下每\(x_i\)个单位的\(\min\)。显然有\(g[j]=\min\{f[i][j],g[j-x_{i}]+1\}\)

那么则有\(f[i][j]=\min\{g[j-x_i]+1,f[i-1][j+y]\}\)。复杂度\(O(nm)\)。

有个需要注意的点是到了跳到m就不能再高了,所以对于\(\{(i,j)|j+x_i>m\}\)的点没办法利用g\(O(1)\)转移(共有m-j个合法可转移点),这个可以通过对g维护一个后缀\(\min\)解决。

好像也可以类比01背包和完全背包来转移。不过我想的时候没想到那个方向QAQ。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int inf = 0x3f3f3f3f;
  4. const int N = 10010;
  5. int n, m, k, f[2][1010], g[1010], x[N], y[N];
  6. int p[N][2];
  7. int main() {
  8. scanf("%d%d%d", &n, &m, &k);
  9. for(int i = 0; i < n; ++i)
  10. scanf("%d%d", &x[i], &y[i]), p[i][0] = 0, p[i][1] = m + 1;
  11. p[n][0] = 0; p[n][1] = m + 1;
  12. for(int i = 1; i <= k; ++i) {
  13. int px, l, h;
  14. scanf("%d%d%d", &px, &l, &h);
  15. p[px][0] = l; p[px][1] = h;
  16. }
  17. int cur = 0, to = 0, min_val = inf;
  18. for(int i = 1; i <= n; ++i) {
  19. cur ^= 1;
  20. for(int j = 1; j <= m; ++j) f[cur][j] = inf;
  21. for(int j = 1; j <= m; ++j) {
  22. if(j <= p[i][0] || j >= p[i][1]) continue;
  23. if(j == m) f[cur][j] = min(f[cur][j], min_val + 1);
  24. if(j - x[i - 1] > 0 && j - x[i - 1] > p[i - 1][0])
  25. f[cur][j] = min(f[cur][j], g[j - x[i - 1]] + 1);
  26. if(j + y[i - 1] <= m && j + y[i - 1] < p[i - 1][1])
  27. f[cur][j] = min(f[cur][j], f[cur ^ 1][j + y[i - 1]]);
  28. if(f[cur][j] != inf) to = i;
  29. }
  30. for(int j = 1; j <= m; ++j) g[j] = inf;
  31. min_val = inf;
  32. for(int j = 1; j <= m; ++j) {
  33. g[j] = f[cur][j];
  34. if(j - x[i] > 0) g[j] = min(g[j], g[j - x[i]] + 1);
  35. if(j + x[i] >= m)
  36. min_val = min(min_val, g[j]);
  37. }
  38. }
  39. if(to == n) {
  40. int ans = inf;
  41. for(int j = 1; j <= m; ++j) ans = min(ans, f[cur][j]);
  42. printf("1\n%d\n", ans);
  43. } else {
  44. int tot = 0;
  45. for(int i = 0; i <= to; ++i) {
  46. if(!(p[i][0] == 0 && p[i][1] == m + 1)) ++tot;
  47. }
  48. printf("0\n%d\n", tot);
  49. }
  50. return 0;
  51. }

LGOJP1941 飞扬的小鸟的更多相关文章

  1. P1907飞扬的小鸟

    P1907飞扬的小鸟 描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或 ...

  2. [codevs3729]飞扬的小鸟

    [codevs3729]飞扬的小鸟 试题描述 输入 输出 输出文件名为 bird.out. 共两行. 第一行,包含一个整数,如果可以成功完成游戏,则输出 1,否则输出 0. 第二行,包含一个整数,如果 ...

  3. Codevs 3729==洛谷P1941 飞扬的小鸟

    P1941 飞扬的小鸟 456通过 2.4K提交 题目提供者该用户不存在 标签动态规划2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录   题目描述 Flappy Bird 是一 ...

  4. NOIP2014 飞扬的小鸟

    3. 飞扬的小鸟 (bird.cpp/c/pas) [问题描述] Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的 ...

  5. Codevs 3729 飞扬的小鸟

    飞扬的小鸟 标签 动态规划 NOIp提高组 2014 难度 提高+/省选- 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小 ...

  6. [NOIP2014][DP]飞扬的小鸟

    [NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...

  7. Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)

    Luogu 1941 [NOIP2014]飞扬的小鸟 (动态规划) Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度 ...

  8. UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP

    #17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:// ...

  9. P1941 飞扬的小鸟(背包)

    P1941 飞扬的小鸟 细节题 上升是完全背包 下降是01背包 (数组访问越界本机怎么能过???(大雾)) #include<iostream> #include<cstdio> ...

随机推荐

  1. C# .NET 支付宝IOT小程序AES密钥解密

    实际测试 KEY 是 16个 byte,byte[] byteKEY = System.Convert.FromBase64String(key);     注意:是Convert.FromBase6 ...

  2. burpsuite证书生成和导入

    官网下载个社区版,基本还是够用的 配置代理的ip和port,选择根证书生成方式 访问配置的ip:port,下载证书 双击下载的证书,导入keychain 打开keychain,信任根证书 再次使用bu ...

  3. 【Tools】HP/惠普v285w 量产工具

    前段时间朋友说自己u盘坏了,让帮忙看看.看下图是这个u盘. 坏的问题:往里面复制东西,提示:请去掉写保护或使用另一张磁盘.但是能正常从里面读取出来数据. 无论更换电脑,还是使用网上的修改注册表等方式皆 ...

  4. Python MySQLdb 学习总结(转)

    转自http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html 感谢@糖拌咸鱼 任何应用都离不开数据,所以在学习python的时候,当然也 ...

  5. [gRPC] 在 .NET Core 中创建 gRPC 服务端和客户端

    gRPC 官网:https://grpc.io/ 1. 创建服务端 1.1 基于 ASP.NET Core Web 应用程序模板创建 gRPC Server 项目. 1.2 编译并运行 2. 创建客户 ...

  6. centos发布 7.7.1908版本了,怎么把老版本更新到新版本了?

    CENTOS升级 7.6 升级到7.7.1908 0.查看目前版本 cat /etc/issue cat /etc/redhat-release 1.下载系统镜像文件 https://www.cent ...

  7. Python开发之规范化目录

    13.规范化目录 规范目录优点: 可读性高 加载快 查询修改简 规范化目录结构 (1) start.py文件:首要配置启动文件,运行run()就可以执行项目 #start import sys imp ...

  8. gdocrimg04从库无法重启问题

    1.查看error.logVersion: '5.6.25-log'  socket: '/tmp/mysqld.3324_gdocrimg04.sock'  port: 3324  Source d ...

  9. Verilog转电路图

    “你写的不是程序,是电路!”这句话听了很多,大多数人还是搞不太懂.程序怎么能是电路呢?这里将一些典型的Verilog转电路图贴出来,也许可以稍稍理解电路思想了. 1. 2. 3. 4. 5. 6. 7 ...

  10. C#中Unity对象的注册方式与生命周期解析

    1.示例代码 请详细阅读 static void Main(string[] args) { { Console.WriteLine("----------全局设置----------&qu ...