• hdu 1176(一道简单的dp)


    题意:很容易理解...

    思路:可以说是数塔(hdu 2084)的类似题,做这个题得时候我们可以先画个图,在第0秒的时候在5位置,第一秒的时候可以在4,5,6位置然后依次类推,然后很容易观察出问题的解法了,其实从上往下推和从下往上推都可以,只不过从下往上推要好做一点,这里我给出了两种方法的解题代码。

    代码实现:

    #include<stdio.h>//从下往上推的
    #include<string.h>
    int a[100005][15],dp[100005][15];
    int nima(int i,int j)
    {
        int x1,x2,x3,temp;
        x1=j-1;x2=j;x3=j+1;
        if(x1<0)
            x1=0;
        if(x3>10)
            x3=10;
        temp=dp[i+1][x1]>dp[i+1][x2]?dp[i+1][x1]:dp[i+1][x2];
        return temp>dp[i+1][x3]?temp:dp[i+1][x3];
    }
    int main()
    {
        int n,i,j,max,t1,t2,f,r;
        while(scanf("%d",&n)!=EOF&&n)
        {
            max=-1;
            memset(a,0,sizeof(a));
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&t1,&t2);
                dp[t2][t1]++;
                if(t2>max)
                    max=t2;
            }
            for(i=max-1;i>=0;i--)
            {
                if(i>=5)
                {
                    for(j=0;j<=10;j++)
                        dp[i][j]+=nima(i,j);
                }
                else
                {
                    f=5-i;r=5+i;
                    for(j=f;j<=r;j++)
                        dp[i][j]+=nima(i,j);
                }
            }
            printf("%d\n",dp[0][5]);
        }
        return 0;
    }
    #include<stdio.h>//从上往下推的
    #include<string.h>
    int dp[100005][15],a[100005][15];
    int nima(int i,int j,int f,int r)
    {
        int x1,x2,x3,temp;
        x1=j-1;x2=j;x3=j+1;
        if(x1>=f&&x1<=r)
            temp=dp[i-1][x1]>dp[i-1][x2]?dp[i-1][x1]:dp[i-1][x2];
        else
            temp=dp[i-1][x2];
        if(x3>=f&&x3<=r)
            temp=dp[i-1][x3]>temp?dp[i-1][x3]:temp;
        return temp;
    }
    int main()
    {
        int n,i,j,max,t1,t2,f1,r1,f2,r2,kao;
        while(scanf("%d",&n)!=EOF&&n)
        {
            max=-1;kao=-1;
            memset(a,0,sizeof(a));
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&t1,&t2);
                a[t2][t1]++;
                if(t2>max)
                    max=t2;
            }
            dp[0][5]=a[0][5];f1=5;r1=5;
            for(i=1;i<=max;i++)
            {
                if(i<=5)
                {
                    f2=5-i;r2=5+i;
                    for(j=f2;j<=r2;j++)
                    {
                        dp[i][j]=a[i][j]+nima(i,j,f1,r1);
                        if(dp[i][j]>kao)
                            kao=dp[i][j];
                    }
                    f1=f2;
                    r1=r2;
                }
                else
                {
                    f1=0;r1=10;
                    for(j=0;j<=10;j++)
                    {
                        dp[i][j]=a[i][j]+nima(i,j,f1,r1);
                        if(dp[i][j]>kao)
                            kao=dp[i][j];
                    }
                }
            }
            printf("%d\n",kao);
        }
        return 0;
    }
  • 相关阅读:
    Cesium的类-Camera
    FTP文件操作之上传文件
    cnBlog 的windows live writer 客户端配置
    Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1
    存储过程中对于文本是两个单引号,而不是一个单引号或者一个双引号
    BackGroundWorker使用总结
    SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别
    T-SQL中default值的使用
    partial 的好处
    sql where 1=1和 0=1 的作用
  • 原文地址:https://www.cnblogs.com/jiangjing/p/2991392.html
Copyright © 2020-2023  润新知