zoukankan      html  css  js  c++  java
  • 洛谷 P1941 飞扬的小鸟

    洛谷 P1941 飞扬的小鸟

    原题链接

    首先吐槽几句

    noip都快到了,我还不刷起联赛大水题!

    题目描述

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

    为了简化问题,我们对游戏规则进行了简化和改编:

    游戏界面是一个长为n ,高为 m 的二维平面,其中有k 个管道(忽略管道的宽度)。

    小鸟始终在游戏界面内移动。小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成。

    小鸟每个单位时间沿横坐标方向右移的距离为1 ,竖直移动的距离由玩家控制。如果点击屏幕,小鸟就会上升一定高度X ,每个单位时间可以点击多次,效果叠加;
    如果不点击屏幕,小鸟就会下降一定高度Y 。小鸟位于横坐标方向不同位置时,上升的高度X 和下降的高度Y 可能互不相同。

    小鸟高度等于0 或者小鸟碰到管道时,游戏失败。小鸟高度为 m 时,无法再上升。
    现在,请你判断是否可以完成游戏。如果可以 ,输出最少点击屏幕数;否则,输出小鸟最多可以通过多少个管道缝隙。

    输入输出格式

    输入格式:

    输入文件名为 bird.in 。

    第1 行有3 个整数n ,m ,k ,分别表示游戏界面的长度,高度和水管的数量,每两个

    整数之间用一个空格隔开;

    接下来的n 行,每行2 个用一个空格隔开的整数X 和Y ,依次表示在横坐标位置0 ~n- 1

    上玩家点击屏幕后,小鸟在下一位置上升的高度X ,以及在这个位置上玩家不点击屏幕时,

    小鸟在下一位置下降的高度Y 。

    接下来k 行,每行3 个整数P ,L ,H ,每两个整数之间用一个空格隔开。每行表示一

    个管道,其中P 表示管道的横坐标,L 表示此管道缝隙的下边沿高度为L ,H 表示管道缝隙

    上边沿的高度(输入数据保证P 各不相同,但不保证按照大小顺序给出)。

    输出格式:

    输出文件名为bird.out 。

    共两行。

    第一行,包含一个整数,如果可以成功完成游戏,则输出1 ,否则输出0 。

    第二行,包含一个整数,如果第一行为1 ,则输出成功完成游戏需要最少点击屏幕数,否则,输出小鸟最多可以通过多少个管道缝隙。

    输入输出样例

    输入样例#1:

    10 10 6 
    3 9  
    9 9  
    1 2  
    1 3  
    1 2  
    1 1  
    2 1  
    2 1  
    1 6  
    2 2  
    1 2 7 
    5 1 5 
    6 3 5 
    7 5 8 
    8 7 9 
    9 1 3 
    

    输出样例#1:

    1
    6
    

    输入样例#2:

    10 10 4 
    1 2  
    3 1  
    2 2  
    1 8  
    1 8  
    3 2  
    2 1  
    2 1  
    2 2  
    1   2  
    1 0 2 
    6 7 9 
    9 1 4 
    3 8 10  
    

    输出样例#2:

    0
    3
    

    【输入输出样例说明】

    自己去看题。。。

    【数据范围】

    对于30% 的数据:5 ≤ n ≤ 10,5 ≤ m ≤ 10,k = 0 ,保证存在一组最优解使得同一单位时间最多点击屏幕3 次;
    对于50% 的数据:5 ≤ n ≤ 2 0 ,5 ≤ m ≤ 10,保证存在一组最优解使得同一单位时间最多点击屏幕3 次;
    对于70% 的数据:5 ≤ n ≤ 1000,5 ≤ m ≤ 1 0 0 ;
    对于100%的数据:5 ≤ n ≤ 100 0 0 ,5 ≤ m ≤ 1 0 00,0 ≤ k < n ,0<X < m ,0<Y <m,0<P <n,0 ≤ L < H ≤ m ,L +1< H 。

    题解、我自己的思路

    50分算法

    f[i][j]表示在距离最左边i个单位,高j的最少点击次数。
    容易想到

    [f[i][j]+k->f[i+1][max(m,j+k*x[i])] (k=1...m)……1 ]

    [f[i][j]->f[i+1][j-y[i]]……2 ]

    再判断一下越界、特判一下k再加会不会产生贡献,即可获得50分。

    AC算法

    上面1式看做完全背包,2式看做01背包求解。
    我傻啦
    增加一个g,专门用于完全背包的转移。
    AC

    Code

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    #define Fname "birda"
    using namespace std;
    #define rep(a,b,c) for(rg int a=b;a<=c;a++)
    #define drep(a,b,c) for(rg int a=b;a>=c;a--)
    #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
    #define il inline
    #define rg register
    #define vd void
    typedef long long ll;
    il int gi(){
        rg int x=0,f=1;rg char ch=getchar();
        while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*f;
    }
    il vd Min(int&a,int b){a=min(a,b);}
    int f[2][1010],g[2][1010],l[10001],r[10001];
    int x[10001],y[10001];
    int main(){
        int n=gi(),m=gi(),kk=gi(),p;
        rep(i,0,n-1)x[i]=gi(),y[i]=gi();
        rep(i,0,n)l[i]=0,r[i]=m+1;
        rep(i,1,kk)p=gi(),l[p]=gi(),r[p]=gi();
        int now=0,minn,res=0;
        rep(i,0,n-1){
            rep(j,1,m)f[now^1][j]=g[now^1][j]=1e9;
            minn=1e9;
            rep(j,1,l[i])f[now][j]=1e9;
            rep(j,r[i],m)f[now][j]=1e9;
            rep(j,1,m)g[now][j]=1e9;
            rep(j,1,m){
                minn=min(minn,f[now][j]);
                Min(g[now][j],f[now][j]);
                if(j!=m)Min(g[now][min(m,j+x[i])],g[now][j]+1);
                Min(f[now^1][min(m,j+x[i])],g[now][j]+1);
            }
            rep(j,max(l[i],y[i])+1,r[i]-1)Min(f[now^1][j-y[i]],f[now][j]);
            if(minn==1e9){printf("0
    %d
    ",res);return 0;}
            if(!(l[i]==0&&r[i]==m+1))++res;
            now^=1;
        }
        int ans=1e9;
        rep(i,1,m)if(i>l[n]&&i<r[n])Min(ans,f[now][i]);
        if(ans==1e9){printf("0
    %d
    ",res);return 0;}
        printf("1
    %d
    ",ans);
        return 0;
    }
    

    另:我在DEBUG时自己下载的data

    In:1
    5 5 0
    3 3
    2 1
    2 3
    2 1
    3 2
    Out:1
    1
    2
    In:2
    500 50 26
    13 30
    40 8
    35 21
    42 25
    27 41
    7 39
    37 48
    35 13
    35 43
    46 28
    28 21
    31 14
    22 4
    30 29
    7 49
    47 19
    30 42
    26 15
    13 24
    44 40
    20 2
    34 8
    5 24
    20 39
    17 21
    22 1
    46 3
    14 19
    7 49
    3 18
    4 5
    37 38
    47 18
    9 10
    46 3
    5 17
    9 38
    24 13
    12 48
    7 29
    24 28
    34 21
    36 3
    44 47
    2 46
    15 11
    1 2
    48 3
    25 7
    18 21
    10 22
    37 23
    16 16
    36 27
    19 42
    11 43
    26 44
    14 12
    47 13
    9 4
    9 23
    14 14
    30 18
    17 10
    24 34
    30 38
    11 23
    12 26
    43 3
    9 13
    49 24
    11 25
    19 29
    41 21
    41 49
    29 5
    28 48
    18 13
    16 39
    22 44
    28 7
    33 39
    29 49
    15 23
    2 28
    40 6
    3 1
    31 26
    29 27
    2 20
    32 30
    24 10
    28 46
    22 48
    36 48
    43 19
    5 26
    8 34
    30 28
    12 36
    6 2
    41 13
    2 27
    38 30
    5 39
    5 36
    20 33
    1 3
    29 27
    2 20
    25 49
    39 34
    30 2
    18 10
    34 29
    45 45
    35 41
    8 36
    19 46
    21 28
    35 30
    19 10
    13 19
    13 47
    45 19
    22 25
    18 16
    9 47
    18 32
    12 7
    16 12
    2 2
    3 15
    42 26
    11 14
    9 1
    43 27
    11 12
    1 28
    14 1
    2 35
    25 24
    2 39
    21 24
    21 37
    35 41
    48 37
    42 6
    2 35
    37 17
    4 45
    17 2
    28 32
    13 28
    10 31
    34 16
    17 14
    39 23
    3 15
    2 28
    2 36
    20 49
    28 17
    11 29
    2 47
    1 10
    42 23
    12 25
    5 29
    9 20
    11 42
    35 27
    6 25
    5 9
    39 6
    41 46
    41 11
    45 20
    28 6
    4 34
    8 10
    44 1
    32 6
    30 36
    34 38
    11 44
    30 46
    26 36
    26 30
    49 20
    35 40
    16 32
    7 17
    2 39
    27 10
    23 35
    19 17
    40 1
    27 20
    42 17
    9 3
    16 43
    4 42
    34 34
    27 33
    5 18
    29 25
    49 35
    41 6
    24 19
    15 2
    9 34
    24 48
    39 1
    23 31
    22 31
    39 38
    30 47
    35 14
    32 12
    47 41
    29 31
    16 28
    21 13
    38 44
    31 4
    1 44
    42 24
    42 31
    30 15
    18 2
    2 12
    44 31
    9 29
    44 45
    41 46
    36 20
    27 3
    4 3
    20 41
    46 1
    49 3
    44 41
    26 41
    28 11
    11 1
    18 12
    12 12
    42 25
    41 42
    21 37
    43 12
    12 26
    19 20
    28 38
    12 30
    43 16
    32 42
    8 13
    33 40
    24 44
    40 46
    11 7
    8 4
    36 4
    1 12
    45 43
    24 8
    19 47
    27 47
    36 43
    32 29
    10 14
    27 22
    26 10
    12 5
    9 7
    1 20
    18 14
    28 9
    22 28
    21 18
    26 49
    30 1
    2 12
    3 37
    11 34
    22 20
    47 48
    46 28
    13 13
    33 22
    24 38
    46 41
    7 24
    5 29
    7 30
    2 32
    29 36
    32 31
    47 34
    23 8
    18 49
    32 20
    47 33
    48 16
    45 36
    42 19
    29 38
    15 36
    12 25
    20 23
    5 26
    5 39
    12 42
    25 9
    31 47
    22 5
    3 9
    24 5
    42 27
    20 42
    13 12
    12 47
    49 31
    33 16
    6 3
    38 11
    28 48
    49 44
    40 24
    8 26
    26 29
    30 28
    43 10
    33 35
    36 8
    27 5
    20 43
    2 24
    30 34
    40 35
    41 33
    1 24
    31 5
    18 26
    33 25
    3 10
    10 32
    42 8
    46 30
    42 33
    38 24
    37 8
    23 43
    31 3
    32 26
    42 28
    10 43
    2 40
    47 24
    22 31
    4 24
    45 18
    11 37
    25 8
    23 22
    45 11
    2 37
    18 24
    30 4
    31 17
    30 23
    44 44
    16 1
    39 19
    29 11
    5 37
    39 49
    6 6
    41 35
    13 14
    13 13
    29 14
    49 46
    42 34
    6 23
    1 35
    45 49
    34 17
    49 23
    35 28
    34 44
    20 28
    48 25
    33 44
    16 45
    14 28
    13 42
    41 12
    39 33
    45 49
    11 1
    34 6
    49 18
    22 4
    45 12
    36 29
    11 7
    8 9
    36 40
    4 2
    41 17
    34 4
    9 30
    21 3
    13 21
    2 28
    22 40
    34 26
    13 11
    35 9
    28 21
    42 38
    27 5
    47 19
    45 6
    25 41
    27 10
    49 40
    39 20
    43 8
    46 49
    35 23
    45 24
    48 8
    35 33
    21 18
    10 14
    6 41
    18 8
    10 18
    18 35
    14 44
    49 14
    35 38
    38 33
    1 34
    32 36
    7 27
    10 11
    40 49
    48 11
    17 8
    24 28
    49 47
    35 14
    15 4
    48 29
    3 3
    47 37
    41 35
    20 41
    20 8
    32 31
    39 47
    41 34
    46 40
    45 19
    3 24
    46 2
    26 36
    21 46
    44 19
    30 47
    27 27
    34 18
    17 10
    14 41
    22 46
    23 16
    48 19
    1 49
    14 1
    18 17
    24 19
    23 6
    6 43
    2 5
    18 31
    2 44
    8 41
    17 29
    1 30
    21 27
    31 43
    42 29
    17 47
    34 31
    47 7
    201 26 45
    157 31 43
    476 32 37
    265 13 50
    300 25 27
    478 4 25
    485 29 44
    425 22 44
    392 44 49
    133 25 38
    320 27 50
    384 2 45
    313 25 40
    287 16 29
    7 1 11
    250 7 43
    130 43 46
    46 16 32
    2 17 42
    5 8 13
    158 0 24
    297 27 30
    499 40 47
    397 43 49
    431 0 31
    63 42 50
    Out:2
    0
    14
    
  • 相关阅读:
    7.18学习日志
    7.16学习日志
    5 Things They Never Tell You About Making iPhone Apps
    MantisBT
    25款实用的桌面版博客编辑器
    【转】如何学会600多种编程语言
    开发者如何提升和推销自己
    CleanMyMac 1.10.8
    VMWARE FUSION 6 KEY
    cocos2dx shader
  • 原文地址:https://www.cnblogs.com/xzz_233/p/7398126.html
Copyright © 2011-2022 走看看