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]);
        }
    }
  • 相关阅读:
    Div+CSS 布局
    Windows Mobile 参考:
    Linux export的作用
    CSS(2)基本语法
    HTML(6)超链接
    HTML(5)常用的格式标签
    HTML(8)表格
    CSS(1) CSS简介
    HTML(7)图像、背景和颜色
    HTML(10)框架
  • 原文地址:https://www.cnblogs.com/sweat123/p/4762303.html
Copyright © 2011-2022 走看看