飞扬的小鸟 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. MAC 添加Jmeter环境变量

    vim ./bash_profile JMETER_HOME=/Users/finup/apache-jmeter-5.1.1 CLASSPATH=$JAVA_HOME/lib/tools.jar:$ ...

  2. 环境配置--升级Python 3.6爬坑

    升级到3.6之后,发现ctrl alt t呼不出命令台,找了半天发现update manager也打不开,而且没有错误报告.....查阅了一番资料看到有人有类似的问题(https://askubunt ...

  3. STL之 stack的基础应用

    头文件 #include<stack> stack<int>  s; stack<char> s;//定义一个名字为s 的存int char的stack 基本指令 ...

  4. Spring AOP 创建Advice 基于Annotation

    public interface IHello { public void sayHello(String str); } public class Hello implements IHello { ...

  5. C#中关于常用日期的计算

    void Main() { DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Convert.ToInt32( ...

  6. springboot笔记08——整合swagger2

    Swagger是什么? Swagger是一个RESTFUL 接口的文档在线自动生成和功能测试的框架.利用swagger2的注解可以快速的在项目中构建Api接口文档,并且提供了测试API的功能. Spr ...

  7. 命令行获取docker远程仓库镜像列表

    命令行获取docker远程仓库镜像列表 获取思路 通过curl获取镜像tag的json串,解析后得到${image}:${tag}的格式 curl获取示例 # curl [:-s] ${API}/${ ...

  8. 【阿里云开发】- 安装JDK

    1.阿里云轻量服务器入口 https://swas.console.aliyun.com/?spm=5176.2020520001.1011.2.29ff4bd3P4AEDc#/servers 2.使 ...

  9. django后台标题替换

    在制作django后台的时候,默认的django admin界面标题为“django管理”,找了许多的资料都很麻烦,偶与好友一起探讨,找到了新的解决方法 在django的py文件中插入 from dj ...

  10. 修改Mysql 字符集,支持Emoji表情

    插入失败 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 at ...