LightOJ-1004-Monkey Banana Problem [DP]


題目傳送門


題意:給定一個菱形的陣列,每次只能向左下或者右下移動,問從最上邊走到最下邊數字之和最大爲多大。

思路:DP,可以分解成兩個數塔。

#include <bits/stdc++.h>

using namespace std;

int dp[210][210];
int main(void)
{
    int T, N, cas=1;
    scanf("%d", &T);
    while (T--)
    {
        memset(dp, 0, sizeof(dp));
        scanf("%d", &N);
        for (int i = 1; i <= N; i++)
            for (int j = 1; j <= i; j++)
                scanf("%d", &dp[i][j]);
        for (int i = N+1; i <= 2*N-1; i++)
            for (int j = 1; j <= 2*N-i; j++)
                scanf("%d", &dp[i][j]);
        for (int i = 2; i <= N; i++)
            for (int j = 1; j <= i; j++)
                dp[i][j] += max(dp[i-1][j-1], dp[i-1][j]);
        for (int i = N+1; i <= 2*N-1; i++)
            for (int j = 1; j <= 2*N-i; j++)
                dp[i][j] += max(dp[i-1][j], dp[i-1][j+1]);
        printf("Case %d: %d\n", cas++, dp[2*N-1][1]);
    }
    return 0;
}
發佈了101 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章