hdoj 1081 To The Max
2013-06-07 20:29
351 查看
参考博客:/article/2918426.html
d[i][j]表示到第i行的所有的同一列的和,3个for循环,时间复杂度O(n^3),表示从第i行到第j行 求从第1列到第n列 连续的最大值。
ac代码:
再贴上我之前自己写的O(n^4)的代码(不知道为么,杭电上对了,sdut上没对)
d[i][j]表示到第i行的所有的同一列的和,3个for循环,时间复杂度O(n^3),表示从第i行到第j行 求从第1列到第n列 连续的最大值。
ac代码:
#include<stdio.h> #include<string.h> int d[110][110]; int main() { int n,i,j,max,k,sum,t; while(~scanf("%d",&n)) { memset(d,0,sizeof(d)); for(i=1; i<=n; i++) for(j=1; j<=n; j++) { scanf("%d",&d[i][j]); d[i][j]+=d[i-1][j]; } max=d[1][1]; for(i=1; i<=n; i++) for(j=i; j<=n; j++) { sum=0; for(k=1; k<=n; k++) { t=d[j][k]-d[i-1][k]; sum+=t; if(sum>=max) max=sum; if(sum<0) sum=0; } } printf("%d\n",max); } }
再贴上我之前自己写的O(n^4)的代码(不知道为么,杭电上对了,sdut上没对)
#include<stdio.h> #include<string.h> #include<stdlib.h> const int INF=-1<<29; int main() { int n,i,j,k,l,d[110][110],a[110],max1,max2,dp[110]; while(~scanf("%d",&n)) { max2=INF; for(i=0; i<n; i++) for(j=0; j<n; j++) scanf("%d",&d[i][j]); for(i=0; i<n; i++) for(j=i; j<n; j++) { memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); for(k=0; k<n; k++) { for(l=i; l<=j; l++) { a[k]+=d[l][k]; } if(k==0) {dp[0]=a[0]; max1=dp[0];} else { if(dp[k-1]>0) dp[k]=a[k]+dp[k-1]; else dp[k]=a[k]; } if(dp[k]>max1) max1=dp[k]; } if(max1>max2) max2=max1; } printf("%d\n",max2); } }
相关文章推荐
- POJ1050 HDOJ1081 TO THE MAX
- HDOJ 1081 To The Max(矩阵DP)
- 【DP】 HDOJ 1081 To The Max
- HDOJ 1081 POJ 1050 ZOJ 1074 TO THE MAX【dp】
- hdoj1081 To The Max
- hdoj 1081 To The Max
- HDOJ 1081(ZOJ 1074) To The Max(动态规划)
- hdu/hdoj 1081 To The Max
- 暑期dp46道(20)HDOJ 1081 To the Max 最大连续子序列+暴力枚举
- HDOJ 1081 To The Max
- HDOJ 1081(ZOJ 1074) To The Max(动态规划)
- HDOJ 1081 To The Max(dp)(状态压缩)未解决
- hdoj 1081 To The Max
- HDOJ-1081 To The Max
- hdu/hdoj 1081-To The Max
- hdoj1081 To The Max(类比于一维最大字段和)
- HDOJ题目1081 To The Max(动态规划)
- hdu 1081 To The Max
- hdu 1081 To The Max(子矩阵最大和)
- hdu 1081 To The Max