试题描述 |
一个数字组成的三角形,有n行,第i行有i个数。从第一个数开始,每次可以往左下或右下走一格,直到走到最后一行,把沿途经过的数全部加起来。如何走才能得到最大的和? 举个例子: 为了简单起见,输入时将每行的数依次输入,第一个数之前并不输入空格。 |
输入 |
第一行:n,表示这个三角形共有n行 第二至n+1行:依次为这个数字三角形各行的数据(按顺序输入),两数之间有一个空格分隔。 |
输出 |
一个数,表示最大的和 |
输入示例 |
413 24 10 14 3 2 20 |
输出示例 |
24 |
其他说明 |
xjr提示你:简单的dp,你懂的。数据范围:0 < n < 1001,组成数字三角形的数都是不超过1000的自然苏 。 |
1 #include2 3 using namespace std; 4 int a[1001][1001],b[1001][1001]; 5 int read() //输入模板 6 { 7 int x=0,f=1; 8 char ch=getchar(); 9 while(ch<'0'||ch>'9')10 {11 if(ch=='-') f=-1;12 ch=getchar();13 }14 while(ch>='0'&&ch<='9')15 {16 x=x*10+ch-'0';17 ch=getchar();18 }19 return x*f;20 } 21 int main()22 {23 int n,i,j;24 n=read();25 for(i=1;i<=n;i++)26 for(j=1;j<=i;j++) a[i][j]=read();27 //for(i=1;i ans) ans=b[n][i];38 printf("%d",ans); 39 //system("pause");40 return 0;41 }
具体思路见相册中的动态的数字三角形~