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]);
        }
    }
  • 相关阅读:
    【转】angular通过$http与服务器通信
    【转】Angular运行原理揭秘 Part 1
    【转】 定义模板和服务
    【转】angular Ajax请求
    【转】AngularJS路由和模板
    算法之美--2.2 Array
    算法之美--2.2数组
    人工神经网络--ANN
    AVL树原理及实现 +B树
    学习计划 2016//11//28
  • 原文地址:https://www.cnblogs.com/sweat123/p/4762303.html
Copyright © 2011-2022 走看看