传送门

Luogu

解题思路

考虑 \(\text{DP}\)

设 \(dp[i][j]\) 表示飞到 \((i, j)\) 这个点的最小触屏次数。

转移其实比较显然,但问题是每次上升时都可以点很多次,这一维次数如果枚举的话,就会带来复杂度的GG。

我们考虑到一个性质,这个无限次点每次都是增加固定的高度,有点像完全背包,于是我们就可以用完全背包的思想来优化,转移时也可以从当前这一列的下方转移。

还有就是如何判断解的情况。

我们从终点向起点枚举,取第一个可以被走到的列就好了。

细节注意事项

  • 咕咕咕

参考代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= (c == '-'), c = getchar();
while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
s = f ? -s : s;
} const int _ = 10000 + 10;
const int __ = 1000 + 10; int n, m, k, x[_], y[_];
int tp[_], bt[_], dp[_][__]; int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
read(n), read(m), read(k);
for (rg int i = 0; i < n; ++i) read(x[i]), read(y[i]);
for (rg int i = 1; i <= n; ++i) bt[i] = 0, tp[i] = m + 1;
for (rg int a, i = 1; i <= k; ++i) read(a), read(bt[a]), read(tp[a]);
memset(dp, 0x3f, sizeof dp);
for (rg int i = 1; i <= m; ++i) dp[0][i] = 0;
for (rg int i = 1; i <= n; ++i) {
for (rg int j = 1; j <= m; ++j) {
if (j >= x[i - 1]) {
dp[i][j] = min(dp[i][j], dp[i - 1][j - x[i - 1]] + 1);
dp[i][j] = min(dp[i][j], dp[i][j - x[i - 1]] + 1);
}
if (j == m) {
for (rg int k = j - x[i - 1]; k <= m; ++k) {
dp[i][j] = min(dp[i][j], dp[i - 1][k] + 1);
dp[i][j] = min(dp[i][j], dp[i][k] + 1);
}
}
}
for (rg int j = bt[i] + 1; j <= tp[i] - 1; ++j)
if (j + y[i - 1] <= m) dp[i][j] = min(dp[i][j], dp[i - 1][j + y[i - 1]]);
for (rg int j = tp[i]; j <= m; ++j) dp[i][j] = 0x3f3f3f3f;
for (rg int j = bt[i]; j >= 1; --j) dp[i][j] = 0x3f3f3f3f;
}
int cnt = k, ans = 0x3f3f3f3f;
for (rg int i = n; i >= 1; --i) {
for (rg int j = bt[i] + 1; j <= tp[i] - 1; ++j)
ans = min(ans, dp[i][j]);
if (ans < 0x3f3f3f3f) break; if (tp[i] <= m) --cnt;
}
if (cnt == k) printf("1\n%d\n", ans);
else printf("0\n%d\n", cnt);
return 0;
}

完结撒花 \(qwq\)

「NOIP2014」飞扬的小鸟的更多相关文章

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

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

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

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

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

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

  4. 【NOIP2014】飞扬的小鸟

    看syq的代码写出来的,chty_orz 原题: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小 ...

  5. 「NOIP2014」「Codevs3728」 联合权值(乱搞

    3728 联合权值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 输入描述 Input Description 输出描述 Ou ...

  6. 「NOIP2014」「LuoguP2296」 寻找道路

    Description 在有向图 G 中,每条边的长度均为 1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在 ...

  7. 「NOIP2014」联合权值

    传送门 Luogu 解题思路 因为这是一棵树,所以说两个点如果能产生联合权值,那么它们就只能通过唯一的一个中转点来匹配,所以我们就枚举这个中转点. 但是我们又会发现,如果把每个点周围的点抠出来进行两两 ...

  8. LOJ2500 NOIP2014 飞扬的小鸟 【背包DP】*

    LOJ2500 NOIP2014 飞扬的小鸟 LINK 题目大意就是说有n个柱子,在每一秒你可以选择不点下降高度y和点p次上升x∗p,若果当前位置加上x∗p大于上界m,就会停在m. 如果可以成功穿越所 ...

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

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

随机推荐

  1. PyQt5窗口操作大全

    1.多窗口交互-使用信号与槽函数'''如果一个窗口和一个窗口交互,尽量不要访问窗口B的控件:应该访问与信号绑定的槽函数,从而降低窗口之间的耦合度 例:如果A直接访问B窗口的控件,一旦B窗口的控件发生改 ...

  2. 一类Log-Gamma积分的一般形式

    \[\Large\int_{0}^{z}x^{t}\ln\Gamma \left ( 1+x \right )\mathrm{d}x~,~z>0\, ,\, t\in N^{*}\] \(\La ...

  3. mysql 默认信息

    泰基MYSQL默认信息 登录名1-------默认用户 名字:root 密码:123 登录名2-------APP对应的数据库 名字:hotekey 密码:8888

  4. 推荐一款好用的博客离线编辑工具——OpenLiveWriter

    1.前言 我们自己一般在写博客的时候都是在博客官网后台写的,但是如果要在多个平台发布博客的话,那就要复制好前面写好的博客,然后再去其它博客平台发布,可见非常的麻烦. 这里推荐一款好用的离线多功能,多平 ...

  5. 【Fine学习笔记】Xcode的快捷方式

    Xcode快捷键 文件 CMD + N: 新文件:  CMD + SHIFT + N: 新项目: CMD + O: 打开: CMD + S: 保存:  CMD + SHIFT + S: 另存为: CM ...

  6. ArrayQueue(队列)

    code1: #include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAXSIZE 6 ...

  7. windows与linux的文件路径

    在windows操作系统中,文件路径的分隔符是反斜杠(“\\”),例如: E:\\hsta\\pdf(这里为防止转义,所以要写成两个反斜杠) 但是在linux操作系统中,文件的分隔符是斜杠(“/”), ...

  8. Sqoop 一点通

    sqoop 是什么? sqoop 主要用于异构数据: 1. 将数据从hadoop,hive 导入.导出到关系型数据库mysql 等; 2. 将关系型数据库 mysql 中数据导入.导出到 hadoop ...

  9. 当在命令行中执行virtualenv venv时报此错误:'utf-8' codec can't decode byte 0xd5 in position 38: invalid continuation by

    1.windows中安装虚拟环境virtualenv时, 当在命令行中执行virtualenv venv时报此错误:'utf-8' codec can't decode byte 0xd5 in po ...

  10. “数据接口请求异常:error”,Layui-table使用遇到的最大一个坑

    后台返回的json格式必须和官方给的一模一样 code必须为0, code必须为0, code必须为0, code必须为0