UVa 10827 Maximum sum on a torus
2016-12-12 08:49
323 查看
题目
UVa 10827 Maximum sum on a torus题解
看了看提交记录里好像10ms的挺少,说明大家都是n^4乱搞?那我也许可以说说n^3做法。这题不过就是在环面上而已,如果不在环上的话,n^3做法应该都知道,不知道请百度最大子矩阵和。这里增加了一点情况而已。枚举两行i1,i2,先考虑夹在i1,i2之间的行的选择,变成了一维序列问题,考虑对于每个位置i,有两种决策,此处sum表示序列前缀和。
ans1=sum[i]−min(sum[j])(0<=j<i)
ans2=sum[n]−(sum[i]−max(sum[j]))(0<=j<i)
第二种情况是环面特殊情况。
对于行来说,环面的影响不过就是你可以把1~i1和i2~n合成一个序列再做一次而已。另外注意在i==n时上述第二种情况不能选,可以认为是由于此时它不可能是环面上才有的情况,所以被第一种统计过,而且如果此时j为0的话,会选出空序列。
代码
//QWsin #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define rep(i,x) for(int i=x;i<=n;++i) using namespace std; const int INF=(1<<30); const int maxn=100; int n,mx[maxn][maxn],suml[maxn][maxn]; int sum[maxn]; inline int cal(int a,int b,int kind)//kind表示计算方式,0表示计算夹在中间的答案,1表示非中间的答案 { rep(i,1) { sum[i]=suml[i][b]-suml[i][a-1]; if(kind) sum[i]=suml[i] -sum[i]; sum[i]+=sum[i-1]; } int maxv=0,minv=0,ret=-INF; rep(i,1){ ret=max(ret,sum[i]-minv); if(i!=n) ret=max(ret,sum -(sum[i]-maxv)); maxv=max(maxv,sum[i]);minv=min(minv,sum[i]); } return ret; } inline void solve() { cin>>n; rep(i,1) rep(j,1){ scanf("%d",mx[i]+j); suml[j][i]=suml[j][i-1]+mx[i][j]; } int ans=-INF; rep(i,1) rep(j,i) { ans=max(ans,cal(i,j,0)); if(!(i==1&&j==n)) ans=max(ans,cal(i,j,1)); } printf("%d\n",ans); } int main() { int T;cin>>T; while(T--) solve(); return 0; }
相关文章推荐
- UVA 10827 Maximum sum on a torus(环面上的最大子矩阵和)
- UVA - 10827 Maximum sum on a torus(dp最大子矩阵和)
- UVa 10827 Maximum sum on a torus (贪心&矩阵环中的最大子矩阵和)
- uva 10827 - Maximum sum on a torus(最大子矩阵升级版)
- uva_10827_Maximum sum on a torus( 普通DP )
- UVa 10827 - Maximum sum on a torus
- UVA 10827 Maximum sum on a torus(子矩阵之和变形)
- UVA - 10827 Maximum sum on a torus
- UVA--10827 Maximum sum on a torus
- uva 10827 - Maximum sum on a torus(连续最大和问题)
- UVA 10827 Maximum sum on a torus(子矩阵之和变形)(前缀和)
- uva 10827 Maximum sum on a torus
- UVA 10827 Maximum sum on a torus .
- UVA - 10827 Maximum sum on a torus
- uva10827-Maximum sum on a torus(矩阵最大和的变形)
- UVA10827 - Maximum sum on a torus
- UVa 10827 - Maximum sum on a torus
- uva10827 - Maximum sum on a torus
- UVA 10827 - Maximum sum on a torus
- Maximum sum on a torus Uva 10827