Herny

<问题分析>

与数塔问题相似,状态转移方程,s[i][j]=max{s[i+1][k]} j-2<=k<=j+2

 1 #include <stdio.h>
 2 
 3 
 4 int main()
 5 {
 6     long v[201][201];
 7     int i,j,k,m,n;
 8     scanf("%d %d",&m,&n);
 9     for(i=1;i<=m;i++)
10     {
11        for(j=1;j<=n;j++)
12        {
13           scanf("%ld",&v[i][j]);
14        }
15     }
16     for(i=n-1;i>=1;i--)
17     {
18        for(j=1;j<=m;j++)
19        {
20            if(j-2>0)
21            {
22                k=v[i+1][j-2];
23            }
24            if(j-1>0)
25            {
26                if(j-1==1)
27                {
28                   k=v[i+1][j-1];
29                }
30                else if(k<v[i+1][j-1])
31                {
32                   k=v[i+1][j-1];
33                }
34            }
35            if(j==1)
36            {
37                k=v[i+1][j];
38            }
39            else if(k<v[i+1][j])
40            {
41                k=v[i+1][j];
42            }
43            if(j+1<=m&&k<v[i+1][j+1])
44            {
45               k=v[i+1][j+1];
46            }
47            if(j+2<=m&&k<v[i+1][j+2])
48            {
49               k=v[i+1][j+2];
50            }
51            v[i][j]+=k;
52        }
53     }
54     k=v[1][1];
55     for(i=2;i<=m;i++)
56      if(k<v[1][i])
57         k=v[1][i];
58     printf("%ld\n",k);
59     return 0;
60 }

 

posted @ 2013-07-03 17:22  simplesslife  阅读(254)  评论(0编辑  收藏  举报