求最小的路径
题目描述:
从数塔顶层出发,每个结点可以选择向左走或向右走,要求一直走到塔底,使得走过的路径上的数值和最小。
例如对于下面这样的数塔
1 2 3 4 5 6
按照 1 - 2 - 4 的路线走,可取得路径上的数值和的最小值为 7
输入描述:
每组输入的第一个行表示行数,最大不超过 1000 行。
后面每行为这个数塔特定行包含的正整数。这些正整数不大于 10000。
输出描述:
对于每组测试数据,输出一行答案。
样例输入:
3 1 2 3 4 5 6
样例输出:
7
从下往上遍历,求出每行的值往上加,直到最上面一行判断大小,就得解
1 #include<iostream> 2 using namespace std; 3 int row[1000][1000]; 4 int main(){ 5 int n; 6 while(cin>>n){ 7 int i,j,sum=0; 8 for(i=0;i<n;i++){ 9 for(j=0;j<=i;j++){ 10 cin>>row[i][j]; 11 } 12 } 13 for(i=n-2;i>=0;i--){ 14 for(j=0;j<=i;j++){ 15 sum=row[i+1][j]; 16 if(sum>row[i+1][j+1]){ 17 sum=row[i+1][j+1]; 18 } 19 row[i][j]=row[i][j]+sum; 20 } 21 } 22 cout<<row[0][0]<<endl; 23 } 24 return 0; 25 }重要