飞扬的小鸟 DP

细节有点恶心的DP,设\(f[i][j]\)表示横坐标为\(i\)(从\(0\)开始)高度为\(j\)时,屏幕点击的最小次数为\(f[i][j]\),转移便很好写了,这里要注意枚举当前状态时要枚举完所有\(j\),因为每次转移只向上跳了一次,所以必须枚举完。

for(int j=1;j<=m+xd[i];++j)
if(j-xd[i]>=0)
f[i][j]=min(f[i][j-xd[i]]+1, f[i-1][j-xd[i]]+1); // 向上跳
for(int j=mih[i];j<=mxh[i];++j)
f[i][j]=min(f[i][j], f[i-1][j+yd[i]]); // 向下落

但是题目还有高度限制,即如果跳到\(m\)以上,高度仍算\(m\),所以我们还要对于\(m\)以上转移一下

for(int j=m+1;j<=m+xd[i];++j)
f[i][m]=min(f[i][m], f[i][j]);

然后还要处理一下非法状态,因为之前枚举了所有状态。

for(int j=1;j<=mih[i]-1;++j) f[i][j]=INF;
for(int j=mxh[i]+1;j<=m+xd[i];++j) f[i][j]=INF;

AC Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define INF 0x3f3f3f3f
#define MAXN 10010
using namespace std;
inline int read(){
char ch=getchar();int s=0;
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+(ch^'0'), ch=getchar();
return s;
}
int mxh[MAXN],mih[MAXN];
int xd[MAXN],yd[MAXN];
int f[MAXN][2002];
bool hav[MAXN];
int n,m,k;
int main(){
n=read(),m=read(),k=read();
for(int i=1;i<=n;++i) mxh[i]=m,mih[i]=1;
for(int i=1;i<=n;++i) xd[i]=read(),yd[i]=read();
for(int i=1;i<=k;++i){
int p=read(),l=read(),h=read();
hav[p]=1;
mih[p]=l+1;
mxh[p]=h-1;
}
memset(f, 0x3f, sizeof f);
for(int i=1;i<=m;++i) f[0][i]=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=m+xd[i];++j)
if(j-xd[i]>=0)
f[i][j]=min(f[i][j-xd[i]]+1, f[i-1][j-xd[i]]+1);
for(int j=m+1;j<=m+xd[i];++j)
f[i][m]=min(f[i][m], f[i][j]);
for(int j=mih[i];j<=mxh[i];++j)
f[i][j]=min(f[i][j], f[i-1][j+yd[i]]);
for(int j=1;j<=mih[i]-1;++j) f[i][j]=INF;
for(int j=mxh[i]+1;j<=m+xd[i];++j) f[i][j]=INF;
//for(int j=mih[i];j<=mxh[i];++j) printf("f[%d][%d]=%d\n", i, j, f[i][j]);
}
int ans=INF;
for(int j=1;j<=m;++j)
ans=min(ans, f[n][j]);
if(ans<INF){
printf("1\n%d", ans);
return 0;
}
for(int i=n-1;i>=0;--i){
int tmp=INF;
for(int j=1;j<=m;++j)
tmp=min(tmp, f[i][j]);
if(tmp<INF){
ans=i;
break;
}
}
int cnt=0;
for(int i=0;i<=ans;++i)
if(hav[i]) ++cnt;
printf("0\n%d", cnt);
return 0;
}

飞扬的小鸟 DP的更多相关文章

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

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

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

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

  3. P1941 飞扬的小鸟[dp]

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

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

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

  5. luogu1941 [NOIp2014]飞扬的小鸟 (dp)

    设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\}$ 然后考虑优化一下转移: 对于一系 ...

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

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

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

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

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

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

  9. [DP]Luogu 2014NOIP提高组 飞扬的小鸟题解

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

随机推荐

  1. idea 终端terminal修改git bash

    1 Ctrl+Alt+s 打开设置修改shell path 2 Alt +12 或View + Tool Windows + Terminal 修改成功

  2. C#精粹--协变和逆变

    概念 协变和逆变来源于类型和类型之间的绑定,C#4.0开始在泛型的接口和委托上支持协变和逆变,不过在这个版本之前的委托也是支持协变和逆变的.比如数组就支持协变,但是这不是一个好的特性,这C#初期版本从 ...

  3. 【转载】 C#使用Math.Round方法对计算结果进行四舍五入操作

    在C#的数值运算中,有时候需要对计算结果进行四舍五入操作,此时就可使用内置方法Math.Round方法来实现四舍五入操作,Math.Round方法有多个重载函数,支持设置有效位数进行四舍五入,如果没有 ...

  4. commonjs 与 es6相关Module语法的区别

    1.export 在接口名字与模块内部的变量之间建立了一一对应的关系,export输出的接口,与其模块内对应的变量值是动态绑定的,即通过暴露的接口可以取到模块内与之对应绑定变量的实时的值. commo ...

  5. c# zip写comment注释

    //生成的压缩文件为test.zip using (FileStream fsOut = File.Create("test.zip")) { //ZipOutputStream类 ...

  6. Arm存储器

    Arm可以引出27根地址线,只能实现128MB的寻址,那么要如何实现1GB的寻址呢?答案就是使用nGCS片选线,nGCSx为低电平为选中相应的外接设备.一共八根片选线,也就是bank1,bank2-以 ...

  7. SpringBoot+SpringCloud+vue+Element开发项目——集成Swagger文档

    在pom.xml文件中添加Maven依赖 <!--swagger--> <dependency> <groupId>io.springfox</groupId ...

  8. SpringBoot使用MockMVC单元测试Controller

    对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络 ...

  9. LFS7.10——准备Host系统

    转载请标明出处:https://www.cnblogs.com/kelamoyujuzhen/articles/9161515.html 实验环境: Host:Windows10 + WMWare W ...

  10. kubectl 命令自动补全

    kubectl 命令自动补全 在linux上 # yum install -y bash-completion # source /usr/share/bash-completion/bash_com ...