1. 程式人生 > 實用技巧 >[計蒜客]dp

[計蒜客]dp

今天acwing裡有個題,我還是還以為是完全二叉樹,結果我隊內dalao一說,原來是線性dp,剛好又是計蒜客的題,那就正好補一下計蒜客的題吧。

撿水果

題目連結


#include <bits/stdc++.h>
using namespace std;

int a[1004][1003];
int dp[1003][1004];
int n;

int main()
{
    cin >> n;

    for(int i = 1; i <= n ; i++){
        for(int j = 1 ;j <= i ; j++){
            cin >> a[i][j];
        }
    }

    for(int i = 1; i <= n ; i++){
        for(int j  =1; j <= i ; j ++){
            dp[i][j] = max( dp[i - 1][j] , dp[i - 1][j - 1] ) + a[i][j];
        }
    }
    int ans = 0;

    for(int i = 1; i <= n ; i ++){
        if( dp[n][i] > ans  ){
            ans = dp[n][i];
        }
    }

    for(int i = 1; i <= n ; i++){
        for(int j  =1; j <= i ; j ++){
           cout << dp[i][j] << ' ';
        }
        cout << endl;
    }

    cout << ans <<endl;

    return 0;
}