1074 To the Max

  这是一道比较经典的动态规划的例题,感觉思路挺巧。这里有一篇不错的文章,可以看一下:

   http://blog.csdn.net/piaoyi0208/article/details/7728972

  还有关于动态规划入门的一篇文章:http://blog.csdn.net/jqandjq/article/details/5060283

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 int n,i,j,k,l,i_max;
 5 int array[101][101],sum[101];
 6 int main()
 7 {
 8     while(cin>>n)
 9     {
10         i_max=-10000000;
11         for(i=0;i<n;i++)
12           for(j=0;j<n;j++)
13           {cin>>array[i][j];
14            if(array[i][j]>i_max) i_max=array[i][j];
15           }
16         for(i=0;i<n;i++)//从第i行到后面j行的数相加,形成新的一行。也就是从多维到一维的转换 
17           for(j=0;j<=n-i-1;j++)
18            {
19                 memset(sum,0,sizeof(sum));
20                 for(k=i;k<=i+j;k++)//从i行到j行相加 
21                   for(l=0;l<n;l++)
22                     {
23                         sum[l]+=array[k][l];
24                         if(sum[l]>i_max) i_max=sum[l];
25                     }
26                     for(l=1;l<n;l++)//动态规划求最大值 
27                      {
28                          if(sum[l-1]>0) sum[l]+=sum[l-1];
29                          if(sum[l]>i_max) i_max=sum[l];
30                      }
31            }
32      cout<<i_max<<endl;
33      }
34     
35     return 0;
36 }
原文地址:https://www.cnblogs.com/wangaohui/p/2869657.html