數(shù)塔問題

#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 50;
int data[N][N];
int dp[N][N];

int main() {
    int n; // 數(shù)塔層數(shù)
    scanf("%d",&n);

    // 初始化數(shù)塔(下三角)
    for(int i=0; i<n; i++) {
        for(int j=0; j<=i; j++) {
            scanf("%d", &data[i][j]);
        }
    }

    // data 最下層付給 dp
    for(int i=0; i<n; i++) {
        dp[n-1][i] = data[n-1][i];
    }

    // 自底向上計(jì)算
    for(int i=n-2; i>=0; i--) {
        for(int j=0; j<=i; j++) {
            dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + data[i][j];
        }
    }

    printf("%d\n", dp[0][0]);

    printf("%d -> ",data[0][0]);

    // 打印路徑結(jié)點(diǎn)
    int j = 0;
    for(int i=1; i<n; i++) {
        // 如果 dp[i-1][j] - data[i-1][j]  ==  dp[i][j+1] 說明是往右走,否則往左走
        int temp = dp[i-1][j] - data[i-1][j];
        if (temp == dp[i][j+1]) {
            j++;
        }

        printf("%d -> ",data[i][j]);
    }

    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容