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 }