Codeforces Round #131(Div. 2)E题

题目链接

加强版的传纸条,必须用三维解法。而且要注意初始化成负数,不然就会WA到死。。。看大神代码,用memset初始化负数。。。

 1 #include <stdio.h>
 2   #include <string.h>
 3   int p[301][301],o[621][301][301],i,j,k;
 4   int getmax(int a,int b,int c,int d)
 5   {
 6       int max;
 7       max = a;
 8       if(max < b)
 9       max = b;
10       if(max < c)
11       max = c;
12       if(max < d)
13       max = d;
14       return max;
15   }
16   int main()
17   {
18       int n,max;
19       scanf("%d",&n);
20       for(i = 1;i <= n;i ++)
21       {
22           for(j = 1;j <= n;j ++)
23           scanf("%d",&p[i][j]);
24       }
25       memset(o,0xf3,sizeof(o));
26       o[0][1][1] = p[1][1];
27       for(k = 1;k <= n+n-2;k ++)
28       {
29           for(i = 1;i <= k+1&&i <= n;i ++)
30           {
31               for(j = 1;j <= k+1&&j <= n;j ++)
32               {
33                   max = getmax(o[k-1][i][j],o[k-1][i][j-1],o[k-1][i-1][j],o[k-1][i-1][j-1]);
34                   if(i == j)
35                   o[k][i][j] = max + p[i][k+2-i];
36                   else
37                   o[k][i][j] = max + p[i][k+2-i] + p[j][k+2-j];
38               }
39           }
40       }
41       printf("%d\n",o[n+n-2][n][n]);
42       return 0;
43   }

 

 

posted @ 2012-08-02 09:30  Naix_x  阅读(210)  评论(0编辑  收藏  举报