LOJ2500 NOIP2014 飞扬的小鸟


LINK


题目大意就是说有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】*的更多相关文章

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

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

  2. 洛谷P1941 飞扬的小鸟(背包 dp)

    题意 题目链接 Sol 很显然的dp,设\(f[i][j]\)表示第\(i\)个位置,高度为\(j\)的最小步数 向上转移的时候是完全背包 向下转移判断一下就可以 #include<bits/s ...

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

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

  4. NOIP2014 飞扬的小鸟

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

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

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

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

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

  7. [NOIP2014]飞扬的小鸟 D1 T3 loj2500 洛谷P1941

    分析: 这是一个DP,没什么好说的,细节很烦人. DP[i][j]表示到第i个位置,高度为j点最少的次数. 转移: 当j=m时 k属于[m-h,m]都可以向DP[i][j]转移,即dp[i][j]=m ...

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

  9. NOIP2014飞扬的小鸟

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

随机推荐

  1. linux 用 grep 查找单个或多个字符串(关键字)

    1.单个 cat /tmp/php.log | grep "成功" 所有的成功都会被查询出来. 2.多个,并列查询 cat /tmp/php.log | grep "推荐 ...

  2. bootstrap自定义——栅格列数修改

    从下载的bootstrap文件中找到less文件夹里面的variables.less,然后可以找到栅格列数进行修改 然后执行一下bootstrap.less,通过命令行,切换到其所在的目录D:\03 ...

  3. thinkphp3.2.3 + nginx 配置二级域名

    使用的是阿里云centOS.74 第一步: 配置urlpath server { listen ; server_name www.xxxx.com xxxx.com; root /data/www/ ...

  4. C# 终于写完了简单的ORM

    实现单表 增 .删. 改 .查 使用接口定义表实体数据.实体对象动态创建,使用 Email 进行数据读取. 存储过程调用示例

  5. poj3348凸包面积

    用叉积求凸包面积 如图所示,每次找p[0]来计算,(叉积是以两个向量构成的平行四边形的面积,所以要/2) #include<map> #include<set> #includ ...

  6. constructor&object 的联系与对比

    构造函数与对象 构造函数是类中的特殊成员函数,用于为对象分配内存.它可用于为数据成员提供值.创建对象时将调用构造函数.它与类具有相同的名称.构造函数不返回任何值. 构造函数是生成对象的模板,一个构造函 ...

  7. (3) iOS开发之UI处理-UIView篇

    在UIView作为许多子控件的容器的时候,首先我们需要动态的计算出UIView下的所有子控件的高度,并布局排列好,然后我们还要把作为容器的UIView的高度调整到刚好包裹着所有子控件,不会过矮,也不会 ...

  8. nyoj——5字符串STL复习

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Given two strings A and B, whose alp ...

  9. 搭建多master的saltstack环境

    0.16.0版本的发布,带来了minion可以连接多Master的特性. 这种方式称为多master( multi-master )配置, 使环境中的SaltStack冗余.在这种配置下,Salt M ...

  10. 获取代理服务器ip列表的方法

    开源项目:https://github.com/SpiderClub/haipproxy,看爬代理的网址列表应该是最多的. CRAWLER_TASKS = [ { 'name': 'mogumiao. ...