[USACO 1.5.1]数字金字塔

地址:http://hustoj.sinaapp.com/problem.php?id=1833

动态规划

a[i][j]储存输入的金字塔,F[i][j]储存a[i][j]处能达到的最大值

状态方程:F[i][j]=max{F[i+1][j], F[i+1][j+1]}+a[i][j]

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

 

posted @ 2013-01-20 10:48  tjsuhst  阅读(209)  评论(0)    收藏  举报