次元传送门:洛谷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. 执行shell脚本报错:syntax error near unexpected token `或syntax error: unexpected end of file

    引起此问题最可能的原因是: 在windows下编写的文件上传到linux执行. 我是在notepad++上编写的代码,之后上传到linux执行,报此错误.仔细检查,语法方面没有错误.上网查了一下,发现 ...

  2. Grunt实例

    module.exports = function(grunt) { // 项目配置 grunt.initConfig({ pkg: grunt.file.readJSON('package.json ...

  3. CSS背景相关属性

    CSS样式可以精确控制HTML元素的背景.边框的样式和外观,也可以精确控制边框的线型和形状.其中,背景相关属性可以用于控制背景色.背景图片等属性.在控制背景图片的同时还可以控制背景图片的排列方式. 常 ...

  4. 04_dubbo_ioc

    [dubbo的IOC实现方法] dubbo的IOC具体实现在:T injectExtension( T instance )方法中,该方法在3个地方被使用: ExtensionLoader.getEx ...

  5. VS2013 C++ 动态链接库的生成

    原文:http://www.cnblogs.com/djiankuo/p/5092025.html 这个东西搞了好几天,现在终于没有问题了,其实现在想来还是微软做的东西好用啊,在这里点个赞!!! LL ...

  6. maven升级遇到的疑惑

    今天在解决一个问题的时候,由于需要修改maven的client包,按照之前的办法,修改完之后,没有修改版本号,而是直接修改client的代码,之后直接 mvn deploy -e 打包上去了,然后奇怪 ...

  7. element ui下拉框如何实现默认选择?

    <template> <el-select v-model="value4" clearable placeholder="请选择"> ...

  8. Windows下将jar包封装成服务程序

    1 准备 使用工具Procrun(http://commons.apache.org/proper/commons-daemon/procrun.html),下载地址(http://archive.a ...

  9. Thinkphp中在本地测试很好,在服务器上出错,有可能是因为debug缓存的问题

    define('APP_DEBUG',false); 这个设置从true改为false后,一定要清空缓存,否则会出错.

  10. 音乐播放插件Aplayer+WebAPI的使用【附下载】

    本次介绍的是音乐播放器APlayer结合WebAPI的使用,先给各位看下效果:   上面就是APlayer的效果,然后这插件的地址是 https://github.com/DIYgod/APlayer ...