LOJ2500 NOIP2014 飞扬的小鸟 【背包DP】*
LOJ2500 NOIP2014 飞扬的小鸟
题目大意就是说有n个柱子,在每一秒你可以选择不点下降高度y和点p次上升x∗p,若果当前位置加上x∗p大于上界m,就会停在m。
如果可以成功穿越所有柱子输出最小点击次数,否则输出最多可以穿越的柱子数量
感觉是非常显然的DP,如果不点就是一个01背包,在点的时候是一个完全背包
所以可以设dp[i][j]是到达第i列高度为j的最小步数
然后可以发现转移
dp[i][j]=min(dp[i−1][j−x[i]∗p]+p)
向下掉的时候是这样的
dp[i][j]=dp[i−1][j+y[i]]
然后在实现完全背包的时候可以变成每次只考虑一次点击的贡献然后加上所有的贡献就好了
然后是注意在完全背包转移的时候先不能考虑下界的影响因素,因为默认转移的时候还没有到达下一根柱子
最后转移完了再把下界的影响加上
然后就是向下降落的情况要在上升之后讨论才行
#include<bits/stdc++.h>
using namespace std;
#define M 1010
#define N 10010
#define INF 0x3f3f3f3f
int dp[][N],ind=;
int n,m;
int k,p[N],l[N],r[N];
int x[N],y[N];
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
for(int i=;i<=k;i++){
int p,ll,rr;
scanf("%d%d%d",&p,&ll,&rr);
l[p]=ll+;r[p]=rr-;
}
for(int i=;i<=n;i++)if(l[i]==&&r[i]==)l[i]=,r[i]=m;
for(int i=;i<=m;i++)dp[ind][i]=;
int tot=;
for(int i=;i<=n;i++){
ind^=;
memset(dp[ind],0x3f,sizeof(dp[ind]));
int dw=l[i],up=r[i];
for(int j=x[i];j<=up;j++)
dp[ind][j]=min(dp[ind][j],min(dp[ind^][j-x[i]],dp[ind][j-x[i]])+);
if(up==m)for(int j=m-x[i];j<=m;j++)
dp[ind][m]=min(dp[ind][m],min(dp[ind^][j],dp[ind][j])+);
for(int j=dw;j<=min(up,m-y[i]);j++)
dp[ind][j]=min(dp[ind][j],dp[ind^][j+y[i]]);
for(int j=;j<dw;j++)dp[ind][j]=INF;
bool check=;
for(int j=;j<=m;j++)
if(dp[ind][j]!=INF){check=;break;}
if(!check){printf("0\n%d",tot);return ;}
if(l[i]>||r[i]<m)tot++;
}
int ans=INF;
for(int i=;i<=m;i++)ans=min(ans,dp[ind][i]);
printf("1\n%d",ans);
return ;
}
LOJ2500 NOIP2014 飞扬的小鸟 【背包DP】*的更多相关文章
- UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
#17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:// ...
- 洛谷P1941 飞扬的小鸟(背包 dp)
题意 题目链接 Sol 很显然的dp,设\(f[i][j]\)表示第\(i\)个位置,高度为\(j\)的最小步数 向上转移的时候是完全背包 向下转移判断一下就可以 #include<bits/s ...
- [NOIP2014]飞扬的小鸟[DP]
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
- NOIP2014 飞扬的小鸟
3. 飞扬的小鸟 (bird.cpp/c/pas) [问题描述] Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的 ...
- vijos1907[noip2014]飞扬的小鸟(完全背包)
描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...
- NOIP2014飞扬的小鸟[DP][WRONG]
坑人啊朴素的dp 75分 用了完全背包才是80分,结果普遍偏小 为什么啊啊啊啊啊 等以后再写一遍吧 #include<iostream> #include<cstdio> #i ...
- [NOIP2014]飞扬的小鸟 D1 T3 loj2500 洛谷P1941
分析: 这是一个DP,没什么好说的,细节很烦人. DP[i][j]表示到第i个位置,高度为j点最少的次数. 转移: 当j=m时 k属于[m-h,m]都可以向DP[i][j]转移,即dp[i][j]=m ...
- 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飞扬的小鸟
长为n,高为m的二维平面,其中有k个管道(忽略管道的宽度)小鸟始终在游戏界面内移动.从最左边任意高度位置出发,到达游戏界面最右边,游戏完成每个单位时间沿横坐标方向右移距离为1,竖直移动的距离由玩家控制 ...
随机推荐
- docker shipyard 问题
安装 docker shipyard curl -s https://shipyard-project.com/deploy | bash -s docker machine 创建的虚拟机无法直接运 ...
- Java环境搭建指南
1.1 配置Java环境 1. 下载并安装Jdk1.7或Jdk1.8 http://www.oracle.com/technetwork/java/javase/downloads/index.ht ...
- 使用js合并table中的单元格
用primefaces做的报表,领导要求合并相同内容的单元格,但是primefaces没有找到可以合并单元格的组件,想来想去,只有页面加载后用js合并了. http://blog.csdn.net/d ...
- Android 进行解析并显示服务端返回的数据
例子说明:用户通过访问web资源的最新电影资讯,服务器端生成XML或JSON格式数据,返回Android客户端进行显示. 此案例开发需要两个方面 WEB开发和Android开发. 一.web开发相对比 ...
- LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)
题目:合并已排序数组 难度:Easy 题目内容: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as ...
- Java之聊天室系统设计一
任务: 先上实现效果图: 登陆界面: index.jsp: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- 委托---.net4.0提供两个比较重要的委托
public delegate void Action<[in T1][,in T2][,in T3]......>([T1 t1][,T2 t2][,T3 t3]...) public ...
- Java MongoDB插入
前言 插入是向MongoDB中添加数据的基本方法.对目标集使用insert方法来插入一条文档.这个方法会给文档增加一个”_id”属性(如果原来没有的话),然后保存到数据库中. 1.连接数据库,拿到集合 ...
- Ansible 小手册系列 七(Ad-hoc)
Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务. ad hoc——临时的,在ansible ...
- Mac安装MySQLdb遇到的坑
最近项目移植, 再进行virtualenv环境安装的时候遇到mysql-python死活安装失败 首先是这个错误: sh: /usr/local/bin/mysql_config: No such f ...