题目大意:
经典的最大连续和问题的变形,从一串数变成矩阵,且行列首尾相连;

解析:
1. 如何解决首尾相连的问题,可以将矩阵拓展为原来的4倍。
2. 对付矩阵,降维,将多行累加到一行;
 假设最大子矩阵的结果为从第r行到k行、从第i列到j列的子矩阵,如下所示(ari表示a[r][i],假设数组下标从1开始):
  | a11 …… a1i ……a1j ……a1n |
  | a21 …… a2i ……a2j ……a2n |
  |  .     .     .    .    |
  |  .     .     .    .    |
  | ar1 …… ari ……arj ……arn |
  |  .     .     .    .    |
  |  .     .     .    .    |
  | ak1 …… aki ……akj ……akn |
  |  .     .     .    .    |
  | an1 …… ani ……anj ……ann |

那么我们将从第r行到第k行的每一行中相同列的加起来,可以得到一个一维数组如下:
 (ar1+……+ak1, ar2+……+ak2, ……,arn+……+akn)
由此我们可以看出最后所求的就是此一维数组的最大子断和问题,到此我们已经将问题转化为上面的已经解决了的问题了。

注意:因为原来矩阵是长度为n的,所以枚举r行到k行,那么其中r行到k行的距离不能超过n,还要求出一维数组后,要暴力求解其中长度为n的最大连续子段和,由于这两点没考虑清楚,结果一直没出来。

#include <cstdio>
#include <cstring>
using namespace std;
const int N = 80;
const int INF = 0x3f3f3f3f;
int grid[N*2][N*2];
int tot[N*2][N*2];
int res[N*2];
int n;
int maxSub(int start) {int max,dp;max = dp = res[start];for(int i = start+1; i < start + n; i++) {if(dp > 0) {dp += res[i];}else {dp = res[i];}if(max < dp) {max = dp;}}return max;
}
int main() {int t;scanf("%d",&t);while(t--) {memset(grid,0,sizeof(grid));scanf("%d",&n);for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) {scanf("%d",&grid[i][j]);grid[n+i][j] = grid[i][n+j] = grid[n+i][n+j] = grid[i][j];}}int len = 2*n;memset(tot,0,sizeof(tot));for(int i = 0; i < len; i++) {for(int j = 0; j < len; j++) {if(i == 0) {tot[i][j] = grid[i][j];}else {tot[i][j] = tot[i-1][j] + grid[i][j];}}}int max = -INF;for(int i = 0; i < len; i++) {for(int j = i; j < i + n && j < len; j++) {for(int k = 0; k < len; k++) {if(i == 0) {res[k] = tot[j][k];}else {res[k] = tot[j][k] - tot[i-1][k];}}for(int k = 0; k < n; k++) {int ans = maxSub(k);if(max < ans) {max = ans;}}}}printf("%d\n",max);}return 0;
}

UVA - 10827 Maximum sum on a torus(dp最大子矩阵和)相关推荐

  1. [UVA 10827] Maximum sum on a torus

    图片加载可能有点慢,请跳过题面先看题解,谢谢 这个题..没什么好讲的.. 把矩阵复制,4个拼到一起,二维前缀和+O(n^4) 枚举就过了..但是这个范围.. 不知道给的什么水数据.. 辣鸡题目.. $ ...

  2. Educational Codeforces Round 108 (Rated for Div. 2) D. Maximum Sum of Products 思维 + dp

    传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的数组a,ba,ba,b,你可以至多反转一段连续区间,求∑i=1nai∗bi\sum _{i=1}^n a_i*b_i∑i=1n​ai​∗ ...

  3. URAL 1146 Maximum Sum(最大子矩阵的和 DP)

    Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...

  4. HDU 1024:Max Sum Plus Plus(DP)

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): ...

  5. NOIP前夕:noi.openjudge,Maximum sum

    Maximum sum 总Time Limit: 1000msMemory Limit: 65536kB Description Given a set of n integers: A={a1, a ...

  6. 简单英文题 16 Maximum Sum Not Exceeding K(python)

    http://noi.openjudge.cn/english/16/ """ 简单英文题 16 Maximum Sum Not Exceeding K(AC) http ...

  7. [Swift]LeetCode1031. 两个非重叠子数组的最大和 | Maximum Sum of Two Non-Overlapping Subarrays...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. D28:Maximum sum(最大和,翻译)

    原题:OpenJudge - 1481:Maximum sum 翻译: 描述:给定一组n个整数:A={a1,a2,...,an},我们定义函数d(A)如下: t1 t2 d(A) = max{ ∑ai ...

  9. 英语翻译 Maximum sum

    OpenJudge - 1481:Maximum sum 2022 2.10 Given a set of n integers: A={a1, a2,..., an}, we define a fu ...

  10. SPOJ KGSS Maximum Sum (线段树)

    SPOJ KGSS Maximum Sum 题意:求区间最大值与第二大值之和 思路:线段树维护两个最大值 /********************************************** ...

最新文章

  1. Java基础部分笔记----------网络编程
  2. 模拟黑洞图像_人类史上第一张黑洞照片即将问世,但其实早在40年前就有人画出了它的样子...
  3. LINQ学习笔记之四:查询内存对象
  4. 132.非对称加密?数据安全的特征?
  5. PHP 表单的提交完美示例
  6. Python单元测试最佳实践
  7. SSH整合所需的jar包
  8. 什么是 Linux 发行版
  9. 贴片DO-218AB封装TVS二极管SM8T33A
  10. 高德地图 聚合效果
  11. 微信小程序 动态获取图片主色调作为背景
  12. 高校先行,科技部公示10个国家级区块链重点项目 | 产业区块链发展周报
  13. 成都市住房公积金提取指南办理手续流程
  14. 微软宣布Azure DNS全面通用
  15. 今天大年三十,新年快乐,我在这里给大家整理了一下除夕的习俗,来看看吧
  16. 高长勇老师:如何去构建企业的魂
  17. 关于Solidworks打包的更好的方式(并保留部分文件结构)——使用“另存为”保存装配体
  18. Codeforces Round #606 (Div. 2) A ~ C
  19. 习题 3.1 假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。
  20. 通过Canvas画布制作黑客帝国背景

热门文章

  1. 基于Windows平台的Radius服务器搭建指南
  2. python怎样查找收盘价_如何在Python中从晨星获得调整后的收盘价?
  3. 新的笔记本电脑没有计算机,最新出炉!2020年10款最轻的笔记本电脑:轻就对了,是您想的吗?...
  4. android短信过滤关键词,iOS 11的垃圾短信按关键词过滤功能使用介绍
  5. JAVA有没有moba游戏_你了解MOBA么?——MOBA游戏类型介绍(上)
  6. 星际争霸II对抗 PYSC2平台 深度强化学习 学习笔记(一)- 环境搭建
  7. lisp6 暖通cad_浩辰CAD暖通2018
  8. 全国计算机等级考试二级教程——Python语言程序设计(2018年版)习题代码:第2章
  9. 为什么Windows的文件名不能超过255个英文字符,求解答
  10. xp iis连接数破解