Shirlies
宁静专注认真的程序媛~

不知道0ms思路是咋样的,偶滴代码15ms……

就是转换成一维数组,然后求最大子序列和……

代码如下:
 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int n;
 5 int inp[105][105];
 6 int temp[105][105];
 7 
 8 int get_sum(int t[])
 9 {
10     int dp[105];
11 
12     dp[0]= t[0];
13     for(int i = 1;i < n;i ++)
14     {
15         if(dp[i-1]>= 0)
16             dp[i] = dp[i-1] + t[i];
17         else
18             dp[i] = t[i];
19     }
20     int ans = dp[0];
21     for(int i = 1;i < n;i ++)
22     {
23         if(ans < dp[i])
24             ans = dp[i];
25     }
26 
27     return ans;
28 }
29 
30 int main()
31 {
32     while(scanf("%d",&n) == 1)
33     {
34         for(int i = 0;i < n;i ++)
35         {
36             for(int j = 0;j < n;j ++)
37             {
38                 scanf("%d",&inp[i][j]);
39                 temp[i][j] = inp[i][j];
40             }
41         }
42 
43         int ans = get_sum(inp[0]);
44         for(int i = 1;i < n;i ++)
45         {
46             int num = get_sum(inp[i]);
47             if(ans < num)
48                 ans = num;
49         }
50 
51         for(int i = 1;i < n;i ++)
52         {
53             for(int j = 0;j < n - i;j ++)
54             {
55                 for(int k = 0;k < n;k ++)
56                 {
57                     inp[j][k] += temp[j+i][k];
58                 }
59                 int num = get_sum(inp[j]);
60                 if(ans < num)
61                     ans = num;
62             }
63         }
64         
65         printf("%d\n",ans);
66     }
67 
68     return 0;
69 }
posted on 2012-08-15 17:35  Shirlies  阅读(168)  评论(0编辑  收藏  举报