NOIP 2014 Day1 T3飞扬的小鸟
题目描述:http://codevs.cn/problem/3729/ 
     表示各种shabi的我编和调了半天,思路大体就是一个完全背包的模型,不过会多一些额外的转移(因为题目限制高度之类的),不过值得注意的是应该先向上转移一遍再向下,不然会WA 
 ——————————分割线—————————–
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define DAN 999999999//被假定为最大值
int f[10010][10010]={0};
int up[10010]={0},down[10010]={0};//每个位置点击1次上升的高度和不点击下降的高度
int maxhigh[10010]={0},minhigh[10010]={0};//上界 和 下界(有管子的就是上、下管子,无管子就是m+1,0)
int n,m,k;
int step=0;//可以通过的管子数目
int minstep=DAN;//最少点击数 
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    for (int i=0;i<n;i++)
        scanf("%d%d",&up[i],&down[i]);
    for (int i=0;i<=n;i++)
        {
            maxhigh[i]=m+1;
            minhigh[i]=0;
        }//初始化上、下界
    int x;
    for (int i=1;i<=k;i++)
        {
            scanf("%d",&x);
            scanf("%d%d",&minhigh[x],&maxhigh[x]);
        }
    for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=m;j++)
                {
                    f[i][j]=DAN;
                    if (j-up[i-1]>0)
                        f[i][j]=min(f[i][j],min(f[i-1][j-up[i-1]],f[i][j-up[i-1]])+1);
                }//完全背包部分
            for (int j=m-up[i-1]; j<=m; j++)
                f[i][m]=min(f[i][m],min(f[i][j],f[i-1][j])+1);//到顶的问题
            for (int j=minhigh[i]+1; j<=maxhigh[i]-1; j++)
                if (j+down[i-1]<=m)
                    f[i][j]=min(f[i][j],f[i-1][j+down[i-1]]);
            for (int j=1; j<=minhigh[i]; j++)
                f[i][j]=DAN;//在最后一层(即落地,或下管子)都不可以
            for (int j=maxhigh[i]; j<=m; j++)
                f[i][j]=DAN;//上管子到顶部不可以
            bool pd=false;
            for (int j=1; j<=m; j++)
                if (f[i][j]<DAN)
                    pd=true;//判断在这个位置是否能够过关
            if (!pd)
                {
                    printf("0\n");
                    printf("%d",step);
                    return 0;
                }//如果不能过关就输出过了几根管子
            else
                if (maxhigh[i]!=m+1)
                    step++;//如果经过的是管子,经过管子数+1
        }
    for (int i=1; i<=m; i++)
            minstep=min(minstep,f[n][i]);//从到达终点的各种方案中选择点击数最少的
    printf("1\n");
    printf("%d",minstep);
  return 0;
} 
NOIP 2014 Day1 T3飞扬的小鸟的更多相关文章
- 【NOIP 2014 DAY1 T3】飞扬的小鸟(DP)
		
题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便 ...
 - 洛谷P1328==codevs3716 生活大爆炸版石头剪刀布[NOIP 2014 day1 T1]
		
P1328 生活大爆炸版石头剪刀布 1.8K通过 2.6K提交 题目提供者2014白永忻 标签模拟NOIp提高组2014 难度普及- 提交该题 讨论 题解 记录 最新讨论 Who can help m ...
 - 3728 联合权值[NOIP 2014 Day1 T2]
		
来源:NOIP2014 Day1 T2 OJ链接: http://codevs.cn/problem/3728/ https://www.luogu.org/problemnew/show/P1351 ...
 - 洛谷P2668 斗地主==codevs 4610 斗地主[NOIP 2015 day1 T3]
		
P2668 斗地主 326通过 2.6K提交 题目提供者洛谷OnlineJudge 标签搜索/枚举NOIp提高组2015 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 出现未知错误是说梗啊 ...
 - noip 2018 day1 T3 赛道修建 贪心_树上问题_multiset
		
Code: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; #define maxn 5000 ...
 - NOIP 2014 提高组 Day1
		
期望得分:100+100+50=250 实际得分:100+100+50=250 此次NOIP ZJ省一分数线:500,SD:345 https://www.luogu.org/problem/lis ...
 - NOIP 2014飞扬的小鸟(DP优化)
		
题目链接 飞扬的小鸟 考场的70分暴力(实际只有50分因为数组开小了……) 考场代码(数组大小已修改) #include <cstdio> #include <cstring> ...
 - NOIP 2014 提高组 题解
		
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
 - Codevs 3729 飞扬的小鸟
		
飞扬的小鸟 标签 动态规划 NOIp提高组 2014 难度 提高+/省选- 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小 ...
 
随机推荐
- 安装多个版本的unity
			
版本特性导致新版本Unity打开老版本的项目工程报错,所以最好在电脑上安装多个不同版本的Unity 方法一 安装目录命名:Unity_3.5 , Unity_4.3.1 确保默认例子的安装路径分开C: ...
 - <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_acce
			
在tomcat/conf/server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.Acce ...
 - 【markdown】markdown常用语法
			
标题 用1~6个# 标题1 标题2 标题3 标题4 标题5 标题6 源码: # 标题1 ## 标题2 ### 标题3 #### 标题4 ##### 标题5 ###### 标题6 引用 引用使用 引用使 ...
 - C#往线程里传递参数
			
Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托. Thread (ThreadStart) 初始化 Th ...
 - Oracle中没有 if exists(...)
			
对于Oracle中没有 if exists(...) 的语法,目前有许多种解决方法,这里先分析常用的三种,推荐使用最后一种 第一种是最常用的,判断count(*)的值是否为零,如下declare v ...
 - .NET 常见的偏门问题
			
1.空格 一般情况下," " 的空格可能被过滤掉,在中文输入法中也同样. 有的人会使用2次空格,但是还是无法达到目的. 实现方法:" "的空格,这不是使用2次空 ...
 - Linux Linux程序练习十一(网络编程大文件发送UDP版)
			
//网络编程发送端--大文件传输(UDP) #include <stdio.h> #include <stdlib.h> #include <string.h> # ...
 - 讲述一下自己在linux中配置ftp服务的经历
			
本人大二小白一名,从大一下学期就开始接触到linux,当时看到学校每次让我们下载资源都在一个ftp服务器中,感觉特别的高大上,所以自己就想什么时候自己能够拥有自己的ftp服务器,自己放一点东西进去,让 ...
 - 第八章 self sizing cell
			
本项目是<beginning iOS8 programming with swift>中的项目学习笔记==>全部笔记目录 ------------------------------ ...
 - Linq动态查询简易解决之道(原创)
			
因为项目需要使用Linq来查询数据,但是在多条件查询时,需要使用一大堆if(...!=string.empty)等判断条件感觉不是很优雅.网上搜索以下,大概找到了两种办法,一种是老外写的一个类,感觉用 ...