poj 1163 The Triangle

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 20040 Accepted: 11615

       本题相当的简单,就是简单的DP问题。从倒数第二层开始,每一层记录下上一层相邻最大的值,a[i][j]=max(a[i+1][j+1],a[i+1][j])+a[i][j]。a[1][1]即是所要求的值:

代码:

 

  
    
1 #include < stdio.h >
2   int max( int a, int b)
3 {
4 if (a > b)
5 return a;
6 return b;
7 }
8   int main()
9 {
10 int a[ 105 ][ 105 ],i,j,n;
11 scanf( " %d " , & n);
12 for (i = 1 ;i <= n;i ++ )
13 for (j = 1 ;j <= i;j ++ )
14 scanf( " %d " , & a[i][j]);
15 for (i = n - 1 ;i >= 1 ;i -- )
16 for (j = 1 ;j <= i;j ++ )
17 a[i][j] = max(a[i + 1 ][j],a[i + 1 ][j + 1 ]) + a[i][j];
18 printf( " %d\n " ,a[ 1 ][ 1 ]);
19 return 0 ;
20 }
21

 

你可能感兴趣的:(poj)