次元传送门:洛谷P1941

思路

从题意可知 在每个单位时间内 可以无限地向上飞 但是只能向下掉一次

所以我们可以考虑运用背包解决这道题

上升时 用完全背包

下降时 用01背包

设f[x][y]为在坐标(x,y)时的最小点击屏幕次数

当飞到天花板时和撞到柱子时特判

一开始设ans为极大值

如果最后一排的值都为极大值则无解

如果无解就倒着回来判断最远能到达第几根柱子

代码

#include<iostream>
#include<cstring>
using namespace std;
#define maxn 10010
int up[maxn],down[maxn],low[maxn],high[maxn];
int f[maxn][];
bool vis[maxn];
int n,m,k,cnt,ans;
int main()
{
memset(f,0x3f,sizeof(f));//初始化为极大值
cin>>n>>m>>k;
for(int i=;i<=n;i++) cin>>up[i]>>down[i];
for(int i=;i<=n;i++)//初始化柱子
{
low[i]=;
high[i]=m;
}
for(int i=;i<=k;i++)
{
int x,y,z;
cin>>x>>y>>z;
vis[x]=;
low[x]=y+;
high[x]=z-;
}
for(int i=;i<=m;i++) f[][i]=;//第一排全是0
for(int i=;i<=n;i++)//枚举x坐标
{
for(int j=+up[i];j<=m+up[i];j++)//完全背包 当前点可以由前一个点上升一次而来
f[i][j]=min(f[i-][j-up[i]]+,f[i][j-up[i]]+);//也可以由当前点上升一次而来
for(int j=m+;j<=m+up[i];j++)//天花板特判
f[i][m]=min(f[i][m],f[i][j]);
for(int j=;j<=m-down[i];j++)//01背包 当前点由前一个点掉下来
f[i][j]=min(f[i][j],f[i-][j+down[i]]);
for(int j=;j<low[i];j++)//判断柱子
f[i][j]=f[][]; //赋值为极大值
for(int j=high[i]+;j<=m;j++)
f[i][j]=f[][];
}
ans=f[][];//赋值为极大值
for(int i=;i<=m;i++) ans=min(ans,f[n][i]);//查询ans
if(ans<f[][])
cout<<<<endl<<ans;//如果有ans
else//如果无解
{
int now,j;
for(now=n;now>=;now--)//倒着判断
{
for(j=;j<=m;j++)//如果当前排可以到达就退出
if(f[now][j]<f[][]) break;
if(j<m) break;
}
ans=;
for(int i=;i<=now;i++)
if(vis[i]) ans++;//计算可以到达的x坐标中有几个管子
cout<<<<endl<<ans;
}
}

【题解】洛谷P1941 [NOIP2014TG] 飞扬的小鸟(背包DP)的更多相关文章

  1. 【洛谷P1941】飞扬的小鸟

    f [ i ] [ j ] 表示横坐标为 i ,高度为 j 时的最小点击次数 分别dp处理: 1.上升,(1)<m (2)>=m 2.下降 3.管道 #include<cstdio& ...

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

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

  3. 洛谷P1941 飞扬的小鸟(背包 dp)

    题意 题目链接 Sol 很显然的dp,设\(f[i][j]\)表示第\(i\)个位置,高度为\(j\)的最小步数 向上转移的时候是完全背包 向下转移判断一下就可以 #include<bits/s ...

  4. 【洛谷P1417】烹调方案 贪心+背包dp

    题目大意:一共有 n 件食材,每件食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间.众所周知,gw的厨艺不怎么样,所以他需要 ...

  5. 洛谷P1273 有线电视网 树上分组背包DP

    P1273 有线电视网 )逼着自己写DP 题意:在一棵树上选出最多的叶子节点,使得叶子节点的值 减去 各个叶子节点到根节点的消耗 >= 0: 思路: 树上分组背包DP,设dp[u][k] 表示 ...

  6. [洛谷P4141] 消失之物「背包DP」

    暴力:暴力枚举少了哪个,下面套一个01背包 f[i][j]表示到了i物品,用了j容量的背包时的方案数,f[i][j]=f[i-1][j]+f[i-1][j-w[i]]O(n^3) 优化:不考虑消失的, ...

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

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

  8. 洛谷 P1941 飞扬的小鸟

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

  9. 洛谷 P2015 二叉苹果树 (树上背包)

    洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包. 首先,定义状态\(d ...

随机推荐

  1. 5、springboot之修改端口号

    在resources中加入application.properties文件,里面加入 servier.port = 端口号 访问的时候,就用localhost:端口号 完事

  2. mybatis笔记<二> 整合spring

    mybatis与spring整合需要添加几个jar包,mybatis-spring, spring-context, spring-jdbc 1. spring ioc只要一个jar包就ok 2. 我 ...

  3. lib 和 dll

    dll 和 lib只有在windows平台才会出现,老是忘记他们的区别和联系,记录一下,以备不时之需,也加深一下印象.  在弄懂两者的区别之前,需要知道两个概念: static library 和 d ...

  4. 车厢调度(train.cpp)

    车厢调度(train.cpp) [问题描述]        有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合.假设从A方向驶来的火车有n节(n<=1000) ...

  5. Web前端面试指导(十九):CSS样式-如何清除元素浮动?

    题目点评 本题属于比较常问的题目,也是在网页设计中经常遇到的问题,面试官希望通过这样的面试题来了解你对网页设计的基本功底,如果这样的题目答不出来,必会让面试官大失所望,面试成功的概率是非常小的. 答题 ...

  6. window下Jekyll建站过程

    > 前言 最近决定要写一个博客,先后注册了博客园和CSND的博客,但是他们的界面主题都不是很符合自己的要求,还没有足够个性化的发挥空间,遂决定自己建一个博客. 网上找了一下教程,感觉都不太详细, ...

  7. [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位

    无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...

  8. CentOS 7运维管理笔记(5)----源代码安装Apache 2.4,搭建LAMP服务器

    ##########################    2016-07-07-Thu--20:34 补充 ##################### 编译安装OpenSSL笔记: 如果系统要使用 ...

  9. 一点点学习的心得-MetroJS

    原文:http://zhangxiaolun.lofter.com/post/217084_73a1a9# 在最近的一个项目中,页面上有一部分由一些图片方块组成,要求说是:“做成类似动画的东东,最好可 ...

  10. Android PopupWindow显示位置设置

    当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的那样,会发 生错位的情况,尤其是不同尺寸的平板上,那错位错的不是一般的不 ...