次元传送门:洛谷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. http所有请求头在Console中打印

    1.目标:将http中的请求头全部打印在Console中 2.基本语句 //1.获得指定的头 String header = response.getHeader("User-Agert&q ...

  2. Effective C++ .17 函数调用时的资源管理

    以书上的代码为例 processWidget(shared_ptr<Widget>(new Widget), priority()) 虽然使用了智能指针来管理资源但是,由于参数值计算顺序的 ...

  3. 提问的智慧 How To Ask Questions The Smart Way

    提问的智慧 How To Ask Questions The Smart Way Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen 本指南英文 ...

  4. 在 Mac OS X 上安装 Docker(转)

    http://www.oschina.net/translate/installing-docker-on-mac-os-x?print 在 Mac OS X 上安装 Docker 注意:Docker ...

  5. javascript面向对象的写法03

    javascript面向对象的写法03 js一些基础知识的说明 prototype 首先每个js函数(类)都有一个prototype的属性,函数是类.注意类有prototype,而普通对象没有. js ...

  6. 如何一次性下载某个类库依赖的所有jar包"

    ** 经常碰到这种事情: ** 在一些非maven工程中(由于某种原因这种工程还是手工添加依赖的),需要用到某个新的类库(假设这个类库发布在maven库中),而这个类库又间接依赖很多其他类库,如果依赖 ...

  7. Sql Server 如何去掉内容里面的Html标签

    DECLARE @str NVARCHAR(MAX)= ' <!DOCTYPE html> <html> <head> </head> <body ...

  8. ElasticSearch之常用插件安装命令

    #head监控安装,推荐 bin/plugin -install mobz/elasticsearch-head #bigdesk集群状态,推荐 bin/plugin -install lukas-v ...

  9. Angular开启两个项目方法

    Angular开启两个项目方法: ng server --port 80

  10. Python学习---重点模块之configparse

    configparse模块常用于生成和修改常见的配置文档 生成配置模块:用字典写 import configparser config = configparser.ConfigParser() co ...