Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
请教大家,这个哪里错了(有注释)谢谢了!如果能指出错误,在下感激不禁,谢谢了! #include <cstdlib> #include <stdio.h> using namespace std; int max(int x,int y) { if(x>y) return(x); else return(y); } int main(int argc, char *argv[]) { int b[101][101],a[101][2],d[101],sum=0,i,j,n,k,m,ma; scanf("%d",&n); for(i=1;i<=n;i++)//输入 for(j=1;j<=n;j++) { scanf("%d",&b[i][j]); if(i==1&&j==1) sum=b[i][j]; if(b[i][j]>sum) sum=b[i][j]; } if(n>1) { for(i=1;i<=n;i++)//搜索任意两行及其中间行组成的矩形能形成的最大值。 { for(j=i;j<=n;j++) { for(k=1;k<=n;k++) { d[k]=0;a[k][0]=0;a[k][1]=0;} for(m=1;m<=n;m++) for(k=i;k<=j;k++) d[m]+=b[k][m];// 算m列的数之和 a[n][0]=0;a[n][1]=d[n]; //a[k][0]表示不取第k列时从k列到n列能组合出的最大值; //a[k][1]表示取第k列时从k列到n列能组合出的最大值; for(k=n-1;k>=1;k--)//动态规划 { a[k][0]=max(a[k+1][0],a[k+1][1]); a[k][1]=d[k]; for(m=k+1;m<=n;m++)//寻找从k+1开始的最大连续正整数列 { if(d[m]<=0) break; else a[k][1]+=d[m]; } } ma=max(a[1][0],a[1][1]); if(sum<ma) sum=ma; } } } printf("%d\n",sum); system("PAUSE"); return EXIT_SUCCESS; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator