酌一杯清酒
阿新 • • 發佈:2019-01-31
數字三角形
問題描述 (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路徑,使該路徑所經過的數字的總和最大。
●每一步可沿左斜線向下或右斜線向下走;
●1<三角形行數≤100;
●三角形中的數字為整數0,1,…99;
.
(圖3.1-1)輸入格式 檔案中首先讀到的是三角形的行數。
接下來描述整個三角形輸出格式 最大總和(整數)樣例輸入5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5樣例輸出30
一道動態規劃可以做的吧,核心就是 dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+dp[i][j];
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int dp[105][105]; int n; while(scanf("%d",&n)==1){ memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&dp[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+dp[i][j]; int sum=dp[n][1]; for(int i=2;i<=n;i++) if(sum<dp[n][i]) sum=dp[n][i]; printf("%d\n",sum); } return 0; }