设f[i][j]为到达(i,j)这个位置的最小操作数

就有$f[i][j]=min\{f[i-1][j+Y[i-1]],f[i-1][j-X[i-1]*k]+k\}$

然后考虑优化一下转移:

对于一系列模x[i-1]相同的高度,它们都可以转移到模x[i-1]相同的高度、而且在它们上边的点,所以只要从下往上做,不断地取一个最小值就可以了(会意 会意...)

要注意的是不管怎么操作,只要操作完高度>M都会变成=M,而且还可以从M点一下还维持在M

  1. #include<bits/stdc++.h>
  2. #define pa pair<int,int>
  3. #define lowb(x) ((x)&(-(x)))
  4. #define REP(i,n0,n) for(i=n0;i<=n;i++)
  5. #define PER(i,n0,n) for(i=n;i>=n0;i--)
  6. #define MAX(a,b) ((a>b)?a:b)
  7. #define MIN(a,b) ((a<b)?a:b)
  8. #define CLR(a,x) memset(a,x,sizeof(a))
  9. #define rei register int
  10. using namespace std;
  11. typedef long long ll;
  12. const int maxn=,maxm=;
  13.  
  14. inline ll rd(){
  15. ll x=;char c=getchar();int neg=;
  16. while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
  17. while(c>=''&&c<='') x=x*+c-'',c=getchar();
  18. return x*neg;
  19. }
  20.  
  21. int N,M,K;
  22. int x[maxn],y[maxn];
  23. int f[][maxm],l[maxn],h[maxn],ans=,cnt;
  24. bool istube[maxn];
  25.  
  26. int main(){
  27. // freopen("testdata.in","r",stdin);
  28. rei i,j,k;
  29. N=rd(),M=rd(),K=rd();
  30. for(i=;i<N;i++) x[i]=rd(),y[i]=rd();
  31. for(i=;i<=N;i++) l[i]=,h[i]=M*;
  32. for(i=;i<=K;i++){
  33. int a=rd(),b=rd(),c=rd();
  34. istube[a]=;
  35. l[a]=b+;h[a]=c-;
  36. }
  37. CLR(f,);CLR(f[],);
  38. bool b=;
  39. for(i=;i<=N&&ans;i++){
  40. CLR(f[b],);
  41. for(j=l[i];j<=min(M,h[i])&&j+y[i-]<=min(M,h[i-]);j++){
  42. if(j+y[i-]>=l[i-]) f[b][j]=f[b^][j+y[i-]];
  43. }
  44. for(j=l[i-];j<l[i-]+x[i-]&&j<=min(M,h[i-]);j++){
  45. int mm=f[b^][j];
  46. // printf("!%d %d\n",j,mm);
  47. for(k=;j+x[i-]*k<=h[i];k++){
  48. int jk=j+x[i-]*k;
  49. // printf("!!!%d %d\n",jk,mm);
  50. bool re=;
  51. if(jk>M) jk=M,re=;
  52. if(jk>=l[i]) f[b][jk]=min(f[b][jk],mm+);
  53. ++mm;mm=min(mm,f[b^][jk]);
  54. if(re) break;
  55. }
  56. }
  57. for(ans=,j=l[i];j<=h[i];j++){
  58. // printf("%d %d %d\n",i,j,f[b][j]);
  59. if(f[b][j]<=1e8) {ans=;break;}
  60. }
  61. if(ans&&istube[i]) cnt++;
  62. b^=;
  63. }
  64. printf("%d\n",ans);
  65. if(ans){
  66. ans=1e8;
  67. for(i=l[N];i<=min(M,h[N]);i++) ans=min(ans,f[b^][i]);
  68. printf("%d\n",ans);
  69. }else{
  70. printf("%d\n",cnt);
  71. }
  72. return ;
  73. }

luogu1941 [NOIp2014]飞扬的小鸟 (dp)的更多相关文章

  1. [NOIP2014]飞扬的小鸟[DP]

    [NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...

  2. NOIP2014飞扬的小鸟[DP][WRONG]

    坑人啊朴素的dp 75分 用了完全背包才是80分,结果普遍偏小 为什么啊啊啊啊啊 等以后再写一遍吧 #include<iostream> #include<cstdio> #i ...

  3. LOJ2500 NOIP2014 飞扬的小鸟 【背包DP】*

    LOJ2500 NOIP2014 飞扬的小鸟 LINK 题目大意就是说有n个柱子,在每一秒你可以选择不点下降高度y和点p次上升x∗p,若果当前位置加上x∗p大于上界m,就会停在m. 如果可以成功穿越所 ...

  4. 飞扬的小鸟 DP

    飞扬的小鸟 DP 细节有点恶心的DP,设\(f[i][j]\)表示横坐标为\(i\)(从\(0\)开始)高度为\(j\)时,屏幕点击的最小次数为\(f[i][j]\),转移便很好写了,这里要注意枚举当 ...

  5. NOIP 2014飞扬的小鸟(DP优化)

    题目链接  飞扬的小鸟 考场的70分暴力(实际只有50分因为数组开小了……) 考场代码(数组大小已修改) #include <cstdio> #include <cstring> ...

  6. NOIP2014 飞扬的小鸟

    3. 飞扬的小鸟 (bird.cpp/c/pas) [问题描述] Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的 ...

  7. vijos1907[noip2014]飞扬的小鸟(完全背包)

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

  8. NOIP2014飞扬的小鸟

    长为n,高为m的二维平面,其中有k个管道(忽略管道的宽度)小鸟始终在游戏界面内移动.从最左边任意高度位置出发,到达游戏界面最右边,游戏完成每个单位时间沿横坐标方向右移距离为1,竖直移动的距离由玩家控制 ...

  9. P1941 飞扬的小鸟[dp]

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

随机推荐

  1. python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环

    开启python之路 内容概要: 一.python介绍 二.安装 三.第一个python程序 四.变量和字符编码 五.用户输入 六.数据类型 七.一切皆对象 八.数据运算 九.if else 流程判断 ...

  2. 20155222卢梓杰 实验五 MSF基础应用

    实验五 MSF基础应用 1.一个主动攻击实践,如ms17_010_eternalblue漏洞; 本次攻击目标是win7虚拟机 首先进行相应配置 然后点launch 就成功了 针对win7的漏洞还是相对 ...

  3. 【第三方插件】使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  4. Repeter中列相同数据合并

    <asp:Repeater runat="server" ID="rptInfo" onitemdatabound="Repeater1_Ite ...

  5. MFC CTreeCtrl运用

    CTreeCtrl运用 删除无效资源 递归的运用 自写遍历目录函数 递归遍历所有子目录 一.删除无效资源 .打开资源文件 .找到无效链接删掉 二.自写遍历目录函数 CFileFind findfile ...

  6. GAN初步——本质上就是在做优化,对于生成器传给辨别器的生成图片,生成器希望辨别器打上标签 1,体现在loss上!

    from:https://www.sohu.com/a/159976204_717210 GAN 从 2014 年诞生以来发展的是相当火热,比较著名的 GAN 的应用有 Pix2Pix.CycleGA ...

  7. 解决 配置springmvc拦截所有请求后请求静态资源404的问题

    <servlet-mapping> <servlet-name>spring-servlet</servlet-name> <url-pattern>/ ...

  8. JAVAWEB 项目注册登录模块问题总结

    tomcat: 假如tomcat服务器启动出现错误,那就可能是servlet或代码的原因 tomcat服务器出现不能访问页面的情况,可以在eclipse tomcat服务器设置里设置为共享服务器模式 ...

  9. Spring MVC统一异常处理

    实际上Spring MVC处理异常有3种方式: (1)一种是在Controller类内部使用@ExceptionHandler使用注解实现异常处理: 可以在Controller内部实现更个性化点异常处 ...

  10. ELK安装部署

    一.ELK简介 ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部.Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大 ...