2016SDAU課程練習三1006

1.題目編號:1006
2.簡單題意:DP算法,數塔問題
3.解題思路形成:採用動態規劃自底向上計算,如果我們要知道所走之和最大,那麼最後一步肯定是走最後一排數其中一個,向上退,
4.感想:遞推,,,喜歡公式,,然後直接輸出1

5.AC代碼:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;


int a[105][105],dp[105][105];


int main()
{
    int t,n,i,j;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        memset(dp,0,sizeof(dp));
        for(i = 1;i<=n;i++)
        {
            for(j = 1;j<=i;j++)
            scanf("%d",&a[i][j]);
        }
        for(i = n;i>=1;i--)
        {
            for(j = 1;j<=i;j++)
            {
                dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+a[i][j];
            }
        }
        printf("%d\n",dp[1][1]);
    }


    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章