• 51NOD 1002 数塔取数问题


    基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
    一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。
    每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。
       5
      8 4
     3 6 9
    7 2 9 5
     
    例子中的最优方案是:5 + 8 + 6 + 9 = 28
     
    Input
    第1行:N,N为数塔的高度。(2 <= N <= 500)
    第2 - N + 1行:每行包括1层数塔的数字,第2行1个数,第3行2个数......第k+1行k个数。数与数之间用空格分隔(0 <= A[i] <= 10^5) 。
    Output
    输出最大值
    Input示例
    4
    5
    8 4
    3 6 9
    7 2 9 5
    Output示例
        28
    题解:从最后一层往上走,每次找最大值叠加上去,最后输出顶点即可。
    AC代码:
     1 #include<iostream>
     2 using namespace std;
     3 const int maxn = 505;
     4 int dp[maxn][maxn];
     5 int n;
     6 int main()
     7 {
     8     cin>>n;
     9     for(int i=1;i<=n;i++)
    10     {
    11         for(int j=1;j<=i;j++)
    12         {
    13             cin>>dp[i][j];
    14         }
    15     }
    16     for(int i=n-1;i>=1;i--)
    17     {
    18         for(int j=1;j<=i;j++)
    19         {
    20             dp[i][j]=max(dp[i+1][j]+dp[i][j],dp[i][j]+dp[i+1][j+1]);
    21         }
    22     }
    23     cout<<dp[1][1]<<endl;
    24     return 0;
    25 }
     
  • 相关阅读:
    个人总结
    第二次冲刺 10
    第二次冲刺 09
    第二次冲刺 08
    第二次冲刺 07
    团队冲刺第七天
    团队绩效评估
    团队冲刺第六天
    团队冲刺第五天
    团队冲刺第四天
  • 原文地址:https://www.cnblogs.com/sortmin/p/7948622.html
Copyright © 2020-2023  润新知