1、问题描述
2、用数组b表示数组a的i~j行对应列元素的和,然后对数组b计算最大字段和,这就将二维动态规划问题转化为一维动态规划的问题。
#include <iostream>
#include<cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define N 101
int main(int argc, char** argv) {
int a[N][N];
int b[N];
int n;
int i,j,k;
while(cin>>n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cin>>a[i][j];
}
int max=-1000;
for(int i=0;i<n;i++){
memset(b,0,sizeof(b));
for(j=i;j<n;j++){
int sum=0;
for(k=0;k<n;k++){
b[k]+=a[j][k];
if(sum<0)sum=b[k];
if(sum>max)max=sum;
}
}
}
cout<<max<<endl;
}
return 0;
}