uva10827 - Maximum sum on a torus(圆环上的最大和)
2013-04-18 20:07
351 查看
和108题意差不多。
就是这个题的原始数据不是存在矩阵里面。而是存在环图中。
什么叫做环图呢,就是对于n*n的矩阵,若某个时间走到最后一列,再次向右走的话,此时会走到第一列,就好像是滚动数组一样。
思路很108一样,只不过把为了满足环图的特点。我们需要把图放大4倍。。
代码如下:
就是这个题的原始数据不是存在矩阵里面。而是存在环图中。
什么叫做环图呢,就是对于n*n的矩阵,若某个时间走到最后一列,再次向右走的话,此时会走到第一列,就好像是滚动数组一样。
思路很108一样,只不过把为了满足环图的特点。我们需要把图放大4倍。。
代码如下:
#include <cstdio> #define M 330 int n, a[M][M]; int main () { int cas, t, sum, max; scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) { scanf("%d",&t); a[i][j] = a[n+i][j] = a[i][n+j] = a[n+i][n+j] = t; a[i][j]+=a[i-1][j]; a[i][n+j]=a[i][j]; } for(int i = n+1; i <= 2*n; i++) for(int j = 1; j <= n; j++) { a[i][j] += a[i-1][j]; a[i][j+n]=a[i][j]; } max = 0; for(int i = 1; i <= n; i++) for(int j = i; j-i < n; j++) for(int k = 1; k <= n; k++) { sum = 0; for(int g = k; g-k < n; g++) { if(sum<0) sum = 0; sum+=a[j][g]-a[i-1][g]; if(sum>max) max = sum; } } printf("%d\n",max); } return 0; }
相关文章推荐
- 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(dp最大子矩阵和)
- UVA 10827 Maximum sum on a torus 可循环的最大连续子矩阵
- (intermediate) 暴力 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
- Maximum sum on a torus Uva 10827
- UVA 10827 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
- uva_10827_Maximum sum on a torus( 普通DP )
- UVA 10827 Maximum sum on a torus
- UVa 10827 Maximum sum on a torus