动态规划经典题目
充分体现了动态规划的核心思想——自顶先下分析,自底向上计算
借用课件里面的话:1、从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。
2、同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。
1 #include<stdio.h>
2 int a[101][101];
3 int max(int a, int b)
4 {
5 return a>b?a:b;
6 }
7 int main()
8 {
9 int t,i,j,n;
10 scanf("%d",&t);
11 while(t--)
12 {
13 scanf("%d",&n);
14 for(i=0;i<n;i++)
15 for(j=0;j<=i;j++)
16 scanf("%d",&a[i][j]);
17 for(i=n-2;i>=0;i--)
18 for(j=0;j<=i;j++)
19 a[i][j] += max(a[i+1][j],a[i+1][j+1]);
20 printf("%d\n",a[0][0]);
21 }
22 return 0;
23 }