正题

题目链接:https://www.luogu.org/problemnew/show/P1941


题目大意

n∗mn*mn∗m的场地,一只鸟,在iii格点击一次升XiX_iXi​格(可以点击多次),不点击掉YiY_iYi​格。不能落地,最高mmm格,然后不能撞到地图上的一些管子。

求是否能够过关,如果能输出最少点击次数,否则输出能过多少个管子。


解题思路

设fi,jf_{i,j}fi,j​表示到(i,j)(i,j)(i,j)位置时,最少点击次数。然后转移
首先是掉落
fi+1,j−downi+1=fi,jf_{i+1,j-down_{i+1}}=f_{i,j}fi+1,j−downi+1​​=fi,j​
然后考虑上升,因为可以点击多次,我们可以用多重背包的方法
fi+1,max{j+upi+1,m}=max{fi,j,fi+1,j}f_{i+1,max\{j+up_{i+1},m\}}=max\{f_{i,j},f_{i+1,j}\}fi+1,max{j+upi+1​,m}​=max{fi,j​,fi+1,j​}

之后将管子位置的fi,jf_{i,j}fi,j​赋值为infinfinf就不会影响到后面的转移了。


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
#define upa min(j+up[i+1],m)
using namespace std;
const int N=11000,M=1100;
struct node{int x,down,up;
}g[N];
int n,m,k,l,ans,mins=2147483647;
int up[N],down[N],f[N][M];
bool cmp(node x,node y)
{return x.x<y.x;}
int main()
{scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++)scanf("%d%d",&up[i],&down[i]);for(int i=1;i<=k;i++)scanf("%d%d%d",&g[i].x,&g[i].down,&g[i].up);sort(g+1,g+1+k,cmp);l=1;memset(f,0x3f,sizeof(f));memset(f[0],0,sizeof(f[0]));for(int i=0;i<=n;i++){if(g[l].x==i&&l<=k){for(int j=1;j<=g[l].down;j++)f[i][j]=1061109567;for(int j=g[l].up;j<=m;j++)f[i][j]=1061109567;bool flag=1;for(int j=1;j<=m;j++)if(f[i][j]<1061109567){flag=0;break;}if(flag){printf("0\n%d",l-1);return 0;}l++;}for(int j=1;j<=m;j++)f[i+1][upa]=min(min(f[i][j],f[i+1][j])+1,f[i+1][upa]);for(int j=down[i+1]+1;j<=m;j++)f[i+1][j-down[i+1]]=min(f[i+1][j-down[i+1]],f[i][j]);}for(int j=1;j<=m;j++)mins=min(mins,f[n][j]);printf("1\n%d",mins);
}

P1941-飞扬的小鸟【dp】相关推荐

  1. 洛谷P1941 飞扬的小鸟

    P1941 飞扬的小鸟 链接:https://www.luogu.org/problemnew/show/P1941 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击 ...

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

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

  3. 洛谷 P1941 飞扬的小鸟

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

  4. luogu P1941 飞扬的小鸟

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

  5. 【题解】luogu P1941 飞扬的小鸟

    转自  https://www.cnblogs.com/y142857/p/7134366.html 首先想到设f[i][j]表示到第i行第j列所需要的最少点击屏幕次数.转移方程为 f[ i ][ j ...

  6. P1941 飞扬的小鸟

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

  7. P1941 [NOIP2014 提高组] 飞扬的小鸟——解题报告

    一.题目链接: P1941 [NOIP2014 提高组] 飞扬的小鸟 二.题目大意 游戏界面是一个长为nnn,高为mmm的二维平面,其中有kkk个管道(忽略管道的宽度).小鸟始终在游戏界面内移动.小鸟 ...

  8. P1941 飞扬小鸟题解

    P1941 飞扬小鸟题解 DP. 设 di,jd_{i, j}di,j​ 为到达坐标 i,ji,ji,j 的最小点击量. 其中,管子里的坐标的值为 inf⁡\infinf. 不难得出,状态转移方程为: ...

  9. Star Way To Heaven (prim最小生成树) // [ NOIP提高组 2014]飞扬的小鸟(DP)

    文章目录 T1:Star Way To Heaven 题目 题解 代码实现 T2:飞扬的小鸟 题目 题解 代码实现 T1:Star Way To Heaven 题目 小 w 伤心的走上了 Star w ...

  10. P1941 [NOIP2014 提高组] 飞扬的小鸟

    题目来源 [NOIP2014 提高组] 飞扬的小鸟 - 洛谷 题目考点 动态规划,dp    枚举,暴力    背包 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点 ...

最新文章

  1. WF4 Beta,RC版文章总结
  2. 论文翻译_做论文翻译需要知道哪些翻译技巧?知行翻译:这3个技巧
  3. vbs 连接oracle 数据库,VBS访问、操作oracle数据库
  4. lintcode: k Sum 解题报告
  5. 在SAE搭建Python+Django+MySQL(基于Windows)
  6. 【技术改造】电商系统用户模块集成Feign-1
  7. Windows 7 蓝屏代码大全 amp; 蓝屏全攻略
  8. 优秀!复旦直博生一作发15篇SCI,并担任12本SCI期刊审稿人
  9. wdos相关问题解答
  10. 大小写 字符串_C# 读取环境变量,和字符串大小写转换
  11. TensorFlow精进之路(九):TensorFlow编程基础
  12. ATA/SATA/SCSI/SAS/FC总线简介
  13. 泛微oa部署linux步骤,泛微E-Cology协同办公平台安装部署手册.doc
  14. 程序员眼中的中国传统文化-王阳明《传习录》17
  15. 洛谷_P1007 独木桥_思维
  16. 安卓android记单词软件
  17. 用Notepad++实现文本比较
  18. 【基础知识】RMAN基础知识-Part2
  19. 服务器自带软件怎么样卸载,告别卸载软件难 四大方法轻松搞定
  20. learn-motrix and 百度网盘

热门文章

  1. ajax 偶尔302,关于Ajax 中response出现302的一点见解
  2. ab st语言编程手册_西门子PLC编程SCL和LAD谁才是王者?一起讨论一下
  3. win7美化_Potplayer64位美化版,无棒子的tv推送
  4. python中可以表示任意大的整数_Python无法表示99999999999999999999这样大的整数。
  5. php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...
  6. 机器学习之模型——保存与加载
  7. 7-2 银行家算法--申请资源 (30 分)
  8. 每天一小时python官方文档学习(二)————流程控制工具
  9. C++ 实现布隆过滤器(BloomFilter)
  10. C++ class实现单向循环链表(完整代码)