此题很容易写出方程,由以前的知识可以迁移得,本题可以用完全背包的方法进行优化,使用滚动数组即可得到答案。

//莫名奇妙60分。不知道什么细节出了错。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 10005;
int main() {
// freopen("input.in", "r", stdin);
int n, m, k;
cin >> n >> m >> k;
int up[maxn], down[maxn], low[maxn], high[maxn];
for(int i = 0; i < n; i++) {
cin >> up[i] >> down[i];
low[i] = 1;
high[i] = m;
}
low[n] = 1; high[n] = m;
int pip[maxn];
memset(pip, 0, sizeof(pip));
for(int i = 1; i <= k; i++) {
int x, y, z;
cin >> x >> y >> z;
low[x] = y+1;
high[x] = z-1;
pip[x] = 1;
}
for(int i = 0; i <= n; i++) {
if(low[i] == 1 && high[i] == m)
high[i] = max(high[i], high[i-1] + up[i-1]);
}
int f[2][maxn];
memset(f, 127, sizeof(f));
int pre = 0, now = 1;
for(int i = 0; i <= m; i++) f[now][i] = 0;
for(int i = 1; i <= n; i++) {
swap(now, pre);
memset(f[now], 127, sizeof(f[now]));
for(int j = low[i]; j <= high[i]; j++) {
if(j+down[i-1] <= m)f[now][j] = f[pre][j+down[i-1]];
if(j-up[i-1]>=0) f[now][j] = min(f[now][j], min(f[pre][j-up[i-1]],f[now][j-up[i-1]])+1);
}
int s = 2139062143;
for(int j = m; j <= high[i]; j++) {
s = min(s, f[now][j]);
}
f[now][m] = s;
if(pip[i]) {
bool ok = false;
for(int j = low[i]; j <= high[i]; j++) {
if(f[now][j] != 2139062143) {
ok = true;
break;
}
}
if(ok) pip[i] = 2;
}
}
int ans = 0x3f3f3f;
for(int i = 1; i <= m; i++) {
ans = min(ans, f[now][i]);
}
if(ans != 0x3f3f3f) {
cout << 1 << endl << ans;
}
else {
cout << 0 << endl;
int sum = 0;
for(int i = 0; i <= n; i++) {
if(pip[i] == 2) sum++;
}
cout << sum;
}
}

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

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

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

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

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

  3. 洛谷 P1941 飞扬的小鸟

    洛谷 P1941 飞扬的小鸟 原题链接 首先吐槽几句 noip都快到了,我还不刷起联赛大水题! 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节 ...

  4. [洛谷P1941] 飞扬的小鸟

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

  5. [NOIP2014] 提高组 洛谷P1941 飞扬的小鸟

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

  6. luogu P1941 飞扬的小鸟

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

  7. 洛谷P1941飞扬的小鸟——细节DP

    题目:https://www.luogu.org/problemnew/show/P1941 此题主要注意许多细节,详见代码. 代码如下: #include<iostream> #incl ...

  8. P1941 飞扬的小鸟[dp]

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

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

    传送门 上升看成完全背包. 下降看成01背包. 注意边界转移就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int ...

随机推荐

  1. 关于ui修改的若干想法

    1.现在发现统一规划好各种xml资源.图片资源还是很重要的. 为什么?因为,很多一些ui设计,比如标题.文字大小.列表的宽高都是统一的, 据我个人理解,一个ui多个部分,如果很多部分都是设计上统一的, ...

  2. 【原】iOS学习之Swift之语法2(精简版)

    1.可选类型和强制解包(?和!) 1> 可选类型(?)和强制解包(!) 在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型.其实所谓的 nil 就是 ...

  3. BZOJ3257 : 树的难题

    设$f[x][i][j]$表示以$x$为根的子树,与$x$连通部分有$i$个黑点,$j$个白点,不联通部分都是均衡的最小代价.若$i>1$,则视作$1$:若$j>2$,则视作$2$. 然后 ...

  4. 最新版EJS的include函数已支持参数传递

    最新版的express中partial函数已经被移除,使用include虽然可以实现同样的效果,但是代码看起来很不爽比如 1 <%-partial("user/home",{ ...

  5. POJ3177 & 求边双联通分量

    题意: 给一张无向图,求加多少边使原图任意两点边双联通. SOL: 一个不会写边双点双强联通的傻逼. 一个结论:把一棵树变成满足条件的图需要加的边使入度为1的点数+1除以2.------>就是树 ...

  6. ACM Haffman编码

    Haffman编码 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去...).现在给你一串字符以及它们所对应的权值 ...

  7. 【HDU】1517 A Multiplication Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1517 题意:每次乘上2~9..p>=n时赢.. #include <cstdio> #incl ...

  8. Linux之线程管理

    linux下查看线程数的几种方法   1. cat /proc/${pid}/status [root@limt01 2325]# ps -ef|grep xinetd|grep -v grep ro ...

  9. 设置 tableview 的背景颜色,总是不生效

    1.只设置了背景图片,却忘记了取消掉 cell 的背景颜色(可以通过层次结构来观察) UIImageView *bgView = [[UIImageView alloc]initWithFrame:s ...

  10. xargs

    xargs的作用一般等同于大多数Unix shell中的反引号,但更加灵活易用,并可以正确处理输入中有空格等特殊字符的情况.对于经常产生大量输出的命令如find.locate和grep来说非常有用.