「NOIP2014」飞扬的小鸟
传送门
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」飞扬的小鸟的更多相关文章
- Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
Luogu 1941 [NOIP2014]飞扬的小鸟 (动态规划) Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度 ...
- UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
#17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:// ...
- [NOIP2014][DP]飞扬的小鸟
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
- 【NOIP2014】飞扬的小鸟
看syq的代码写出来的,chty_orz 原题: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小 ...
- 「NOIP2014」「Codevs3728」 联合权值(乱搞
3728 联合权值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 输入描述 Input Description 输出描述 Ou ...
- 「NOIP2014」「LuoguP2296」 寻找道路
Description 在有向图 G 中,每条边的长度均为 1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在 ...
- 「NOIP2014」联合权值
传送门 Luogu 解题思路 因为这是一棵树,所以说两个点如果能产生联合权值,那么它们就只能通过唯一的一个中转点来匹配,所以我们就枚举这个中转点. 但是我们又会发现,如果把每个点周围的点抠出来进行两两 ...
- LOJ2500 NOIP2014 飞扬的小鸟 【背包DP】*
LOJ2500 NOIP2014 飞扬的小鸟 LINK 题目大意就是说有n个柱子,在每一秒你可以选择不点下降高度y和点p次上升x∗p,若果当前位置加上x∗p大于上界m,就会停在m. 如果可以成功穿越所 ...
- [NOIP2014]飞扬的小鸟[DP]
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
随机推荐
- L3-022 地铁一日游
floyd算法建立新图,dfs标记~ #include<bits/stdc++.h> using namespace std; ; const int inf=1e9; int d[max ...
- 如何让div中的img图片显示在div下面。
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- 多进程 多进程queue
多进程 import multiprocessing import threading import time def thread_run(): print(threading.get_ident( ...
- Wireless-MCS
MCS是modulation and coding scheme的缩写,可以翻译为调制和编码格式,我们可以选择配置该参数,来选择AP和Client之间传输的MCS rate,这些数据速率是使用shor ...
- 02-15Android学习进度报告十五
今天学习了关于ListView Item多布局的实现.感觉有点困难. 何为ListView Item多布局,打个比方,QQ这种聊天列表 代码示例如下: public class MutiLayoutA ...
- Codeforces Round #616 (Div. 2) D
莫队的模板 struct node{ int l,r,id; }q[maxn]; int cmp(node a,node b) { ) ? a.r < b.r : a.r > b.r); ...
- PB开启源码文件
下载的源码没有pbw文件,新建workspace,然后new Target选existing application
- 设计模式课程 设计模式精讲 6-2 抽象工厂coding
1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...
- 读书笔记 - The Hitchhiker's Guide to Python
网址 http://docs.python-guide.org/en/latest/ Reuqests库的作者写的经验 1. 项目需要一个好的结构 https://www.kennethreitz.o ...
- Flask程序相关配置加载的三种方式
方式一:从对象中加载配置 1.定义配置类,在配置类中添加相应的配置 2.通过app.config.from_object(配置类)进行加载 代码如下: from flask import Flask ...