博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10827 - Maximum sum on a torus
阅读量:6189 次
发布时间:2019-06-21

本文共 1538 字,大约阅读时间需要 5 分钟。

  题目大意:的加强版,求最大子矩阵和,不过矩阵是可以循环的,矩阵到结尾时可以循环到开头。开始听纠结的,想着难道要分情况讨论吗?!就去网上搜,看到可以通过补全进行处理,也是,通过补全一个相同的,问题就迎刃而解了,所以把n*n的矩阵扩展成2n*2n的矩阵就好了。

1 #include 
2 #include
3 #define MAXN 160 4 5 int a[MAXN][MAXN], sum[MAXN][MAXN]; 6 7 int main() 8 { 9 #ifdef LOCAL10 freopen("in", "r", stdin);11 #endif12 int T;13 scanf("%d", &T);14 while (T--)15 {16 int n;17 scanf("%d", &n);18 memset(sum, 0, sizeof(sum));19 for (int i = 1; i <= n; i++)20 {21 for (int j = 1; j <= n; j++)22 scanf("%d", &a[i][j]);23 for (int j = n+1; j <= 2*n; j++)24 a[i][j] = a[i][j-n];25 }26 for (int i = n+1; i <= 2*n; i++)27 for (int j = 1; j <= 2*n; j++)28 a[i][j] = a[i-n][j];29 for (int i = 1; i <= 2*n; i++)30 for (int j = 1; j <= 2*n; j++)31 sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[i-1][j-1] + a[i][j];32 int max = a[1][1];33 for (int i = 1; i <= n; i++)34 for (int p = 0; p < n; p++)35 for (int j = 1; j <= n; j++)36 for (int q = 0; q < n; q++)37 {38 int t = sum[i+p][j+q] - sum[i+p][j-1] - sum[i-1][j+q] + sum[i-1][j-1];39 if (t > max) max = t;40 }41 printf("%d\n", max);42 }43 return 0;44 }45 46
View Code

 

转载于:https://www.cnblogs.com/xiaobaibuhei/p/3265324.html

你可能感兴趣的文章
《Javascript秘密花园》学习笔记(下)
查看>>
[20190524]DISABLE TABLE LOCK(12c).txt
查看>>
linux命令行翻页
查看>>
git 学习笔记
查看>>
python 序列化之JSON和pickle详解
查看>>
Webstorm配置svn【window系统】
查看>>
Android应用神器:高级终端Termux
查看>>
无边框窗体移动
查看>>
.Hbase批量导入数据应用
查看>>
sql openxml sp_xml_preparedocument xml 中文乱码
查看>>
帧中继的配置
查看>>
前端资源收藏
查看>>
json-lib解析json之二维JSONArray
查看>>
校验软件包
查看>>
1084 Broken Keyboard
查看>>
CentOS6.8单用户模式下修改密码
查看>>
优雅的实现微信分享/支付,组件化
查看>>
八、Android性能优化之电量优化(二)
查看>>
burpsuite上传截断拿shell
查看>>
【网络流24题】
查看>>