using namespace std;
void exchange(int &a,int &b){
int t;
t=a,a=b;b=t;
}
int maxsum(int n,int *a){
int sum=0,b=0;
for (int i=1;i<=n;i++){
if (b>0) b+=a[i];
else b=a[i];
if (b>sum) sum=b;
}
return sum;
}
int maxsum2(int m,int n,int **a){
int sum=0;
int *b=new int [n+1];
for (int i=1;i<=m;i++){
memset(b,0,sizeof(b));
for (int j=i;j<=m;j++){
for (int k=1;k<=n;k++)
b[k]+=a[j][k];
int max1=maxsum(n,b);
if (max1>sum) sum=max1;
}
}
return sum;
}
int main (void){
int m,n;
cin>>m>>n;
int **rock=new int *[m+1];
for (int i=0;i<=m;i++) rock[i]=new int [n+1];
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
cin>>rock[i][j];
cout<<maxsum2(m,n,rock);
while(1);
return 0;
}
#include<string>
using namespace std;
int rock[401][401];
void exchange(int &a,int &b){
int t;
t=a,a=b;b=t;
}
int maxsum(int n,int a[401]){
int sum=0,b=0;
for (int i=1;i<=n;i++){
if (b>0) b+=a[i];
else b=a[i];
if (b>sum) sum=b;
}
return sum;
}
int maxsum2(int m,int n){
int sum=0;
int b[401];
for (int i=1;i<=m;i++){
memset(b,0,sizeof(b));
for (int j=i;j<=m;j++){
for (int k=1;k<=n;k++)
b[k]+=rock[j][k];
int max1=maxsum(n,b);
if (max1>sum) sum=max1;
}
}
return sum;
}
int main (void){
int m,n;
cin>>m>>n;
for (int i=1;i<=m;i++){
string s;
cin>>s;
for (int j=1;j<=n;j++){
rock[i][j]=s.at(j-1)-’0’;
if (rock[i][j]==0) rock[i][j]=-1;
}
}
cout<<maxsum2(m,n);
while(1);
return 0;
}
/*
状态题目:[AHOI2007]宝库通道
题目编号:299-[AHOI2007]宝库通道 查看该题
状态: Accepted
测评机: Xeost[5]
得分: 100分
提交日期: 2008-10-14 20:49:00
有效耗时: 2391毫秒
测试结果1: 通过本测试点|有效耗时63:ms
测试结果2: 通过本测试点|有效耗时47:ms
测试结果3: 通过本测试点|有效耗时47:ms
测试结果4: 通过本测试点|有效耗时93:ms
测试结果5: 通过本测试点|有效耗时109:ms
测试结果6: 通过本测试点|有效耗时156:ms
测试结果7: 通过本测试点|有效耗时453:ms
测试结果8: 通过本测试点|有效耗时469:ms
测试结果9: 通过本测试点|有效耗时438:ms
测试结果10: 通过本测试点|有效耗时516:ms
*/
你这毛病不好~~~自己的程序还是自己好好找错吧,这是非常重要的一种能力啊...
---------------->个人签名<---------------
耐心
I’ll do my best!!!多谢!!