數字三角形(動態規划)


題目描述
給定一個由n行數字組成的數字三角形如下圖所示。試設計一個算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。
對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大值。


輸入
輸入數據的第1行是數字三角形的行數n,1≤n≤100。接下來n行是數字三角形各行中的數字。所有數字在0..99之間。


輸出
輸出數據只有一個整數,表示計算出的最大值。


示例輸入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5


示例輸出
30

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 int a[105][105] = {0};
 7 int dp[105][105] = {0};
 8 
 9 int main(){
10     int n;
11     cin>>n;
12     for( int i = 1; i <= n; i++ )
13         for( int j = 1; j <= i; j++ )
14             cin>>a[i][j];
15     for( int i = 1; i <= n; i++ )    
16         for( int j = 1; j <= i; j++ )
17             dp[i][j] = max(dp[i-1][j-1],dp[i-1][j]) + a[i][j];
18     int ans = 0;
19     for( int j = 1; j <= n; j++ )
20         ans = max(ans,dp[n][j]);
21     cout<<ans<<endl;
22     return 0;
23 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM