演算法-動態規劃(數字三角形)
阿新 • • 發佈:2018-12-22
數字三角形問題
問題描述:給定一個由n行數字組成的數字三角形,如下圖
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
演算法設計:要求設計一個演算法,計算從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大
資料輸入:輸入第一行是數字三角形的行數n,1<=n<=100,接下來是數字三角各行中的數字,所有數字在0~99之間。
#include <iostream> using namespace std; int a[20][20],b[20][20]; int main() { int n; //輸入數字三角形的層數 cin>>n; int s,t; int i,j; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { cin>>a[i][j];//輸入每一層的內容 b[i][j]=a[i][j];//用來儲存原陣列的內容 } } for(i = n - 1; i >= 1; i --) { for(j = 1; j <= i; j ++) { if((b[i+1][j]+ b[i][j])>(b[i+1][j+1]+b[i][j])) b[i][j]=b[i+1][j]+ b[i][j]; else b[i][j]=b[i+1][j+1]+b[i][j]; } } //輸出最優值 cout<<b[1][1]<<endl; int k=1; for(int i=1; i<=n; i++) { //輸入最優解 cout<<a[i][k]<<" "; if(a[i][k]+b[i+1][k]<a[i][k]+b[i+1][k+1]) { k=k+1; } } return 0; }
輸出:30 7 3 8 7 5