飞扬的小鸟 DP
飞扬的小鸟 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的更多相关文章
- NOIP 2014飞扬的小鸟(DP优化)
题目链接 飞扬的小鸟 考场的70分暴力(实际只有50分因为数组开小了……) 考场代码(数组大小已修改) #include <cstdio> #include <cstring> ...
- [NOIP2014]飞扬的小鸟[DP]
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
- P1941 飞扬的小鸟[dp]
题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣 ...
- NOIP2014飞扬的小鸟[DP][WRONG]
坑人啊朴素的dp 75分 用了完全背包才是80分,结果普遍偏小 为什么啊啊啊啊啊 等以后再写一遍吧 #include<iostream> #include<cstdio> #i ...
- 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\}$ 然后考虑优化一下转移: 对于一系 ...
- [NOIP2014][DP]飞扬的小鸟
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
- UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
#17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:// ...
- LOJ2500 NOIP2014 飞扬的小鸟 【背包DP】*
LOJ2500 NOIP2014 飞扬的小鸟 LINK 题目大意就是说有n个柱子,在每一秒你可以选择不点下降高度y和点p次上升x∗p,若果当前位置加上x∗p大于上界m,就会停在m. 如果可以成功穿越所 ...
- [DP]Luogu 2014NOIP提高组 飞扬的小鸟题解
2014NOIP提高组飞扬的小鸟题解 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一 ...
随机推荐
- Locust性能测试_百度案例
一.安装: 1.Locust在PyPI上可用,可以通过pip或easy_install安装:pip install locustio 2.查看Locust可用选项:loc ...
- 最清晰易懂的Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别
timestamp数据类型 Mysql数据库中,当字段类型为timestamp(时间戳)时,如果默认值取CURRENT_TIMESTAMP,则在insert一条记录时,此时的值自动设置为系统当前时间, ...
- 在jenkins中使用shell命令推送当前主机上的docker镜像到远程的Harbor私有仓库
1.jenkins主机上的docker配置 先在Jenkins主机的docke上配置上Harbor私有仓库地址 cat /etc/docker/daemon.json { "insecure ...
- 使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点
原文:使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点 制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就 ...
- Ubuntu18.04防火墙相关
Ubuntu 18.04 LTS 系统中已经默认附带了 UFW 工具,如果您的系统中没有安装,可以在「终端」中执行如下命令进行安装: sudo apt install ufw 检查UFW状态 sudo ...
- Part_three:Redis持久化存储
redis持久化存储 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. 1.RD ...
- MFC_选择目录对话框_选择文件对话框_指定目录遍历文件
选择目录对话框 void C资源共享吧视频广告清理工具Dlg::OnBnClickedCls() { // 清空编辑框内容 m_Edit.SetWindowTextW(L""); ...
- HDFS-SecondaryNameNode(SNN)角色介绍
它出现在Hadoop1.x版本中,又称辅助NameNode,在Hadoop2.x以后的版本中此角色消失.如果充当datanode节点的一台机器宕机或者损害,其数据不会丢失,因为备份数据还存在于其他的d ...
- python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(已弃用)
前言 1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请 ...
- Javascript诞生记 [转载]
1. "1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.这是历史上第一个比较成熟的网络浏览器,轰动一时.但是,这个版本的浏览器只能用来浏览,不具备与访问者互动 ...