zoukankan      html  css  js  c++  java
  • hdu2845 dp

    这题开始的思路:用二维数组来存,果断超时了,因为数组开不了。

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #define maxn 10002
    int map[maxn][maxn],dp[maxn][maxn],ans[maxn];
    int main()
    {
        int i,j;
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    scanf("%d",&map[i][j]);
                }
            }
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    dp[i][j]=max(dp[i][j-1],dp[i][j-2]+map[i][j]);
                }
            }
            /*for(i=1;i<=n;i++)
                printf("%d ",dp[i][m]);
            puts("");*/
            for(i=1;i<=n;i++)
                ans[i]=0;
            for(i=1;i<=n;i++)
            {
                if(i==1)
                {
                    ans[i]=max(ans[i],dp[i][m]);
                }
                else
                {
                    ans[i]=max(ans[i-1],ans[i-2]+dp[i][m]);
                }
            }
            printf("%d
    ",ans[n]);
        }
    }

    后来看了别人的题解,使用一维数组来存。

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #define maxn 200010
    int dp[maxn],ans[maxn],map[maxn];
    int max(int x,int y)
    {
        return x>y?x:y;
    }
    int main()
    {
        int i,j;
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    scanf("%d",&dp[j]);
                }
                for(j=1;j<=m;j++)
                {
                    dp[j]=max(dp[j-1],dp[j-2]+dp[j]);
                }
                ans[i]=dp[m];
            }
            /*for(i=1;i<=n;i++)
                printf("%d ",dp[i][m]);
            puts("");*/
            for(i=2;i<=n;i++)
            {
                ans[i]=max(ans[i-2]+ans[i],ans[i-1]);
            }
            printf("%d
    ",ans[n]);
        }
    }
  • 相关阅读:
    学生管理系统
    python集合(方法)
    python字典(包括方法)
    python元组(包括方法)
    python列表(包含列表方法)
    python索引
    python三元运算
    python while循环
    python-if语句
    python数据类型和运算符
  • 原文地址:https://www.cnblogs.com/sweat123/p/4762303.html
Copyright © 2011-2022 走看看