博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-1081-To The Max
阅读量:7071 次
发布时间:2019-06-28

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

求最大连续子矩阵和问题

可以转化为求最大连续子序列问题

map[i][j]=map[0][j]+map[1][j]+...+map[i][j]

即将第 j 列前 i 行的值压缩到map[i][j]

求第 x 行到第 y 行之间最大连续矩阵和,就将 x~y 行同列元素当成一个元素处理

这样就将 x~y 行压缩成了一行。再求最大连续子序列

若有4行

分别将第 1,  1和2,  1和2和3,  1和2和3和4,  2和3,  2和3和4,  3和4,  4 行压缩为一行 

代码如下:

#include
int map[105][105];int main(){ int n,i,j,k; while(scanf("%d",&n)!=EOF) { int t; for(i=1; i<=n; i++) for(j=1; j<=n; j++) //读数据时就压缩 { scanf("%d",&t); map[i][j]=map[i-1][j]+t; } int max=0; for(i=1; i<=n; i++) //三个循环求所有压缩情况中的最大值 { for(j=i; j<=n; j++) { int s=0; for(k=1; k<=n; k++) //k 控制列 { s+=map[j][k]-map[i-1][k]; // i~j 行压缩为一行,求最大连续子序列 if(s<0) s=0; //值为负,舍弃 if(s>max) max=s; } } } printf("%d\n",max); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/Houheshuai/p/3698838.html

你可能感兴趣的文章
数据库相关
查看>>
转:推荐一个包:Hashids,用来把整数生成唯一字符串(比如:通过加密解密id来隐藏真实id)...
查看>>
参考学习
查看>>
Cocos暂停和重新开始游戏
查看>>
mysql分组取每组大的记录
查看>>
Windows Server 2012 R2怎么配置域控制器?(转)
查看>>
matlab global
查看>>
php构造函数和析构函数
查看>>
javascript 坑
查看>>
PHP数组函数总结
查看>>
定时任务
查看>>
MSChart 设置饼图颜色 图例背景色 图例显示位置
查看>>
jQuery中mouseleave和mouseout的区别详解
查看>>
[LeetCode] Binary Tree Level Order Traversal Solution
查看>>
[Codeforces375E]Red and Black Tree
查看>>
MySQL基础学习之数据库
查看>>
python 键盘输入
查看>>
算法实验1 两个数组的中位数
查看>>
仓储管理的目标
查看>>
gcc g++ 参数介绍
查看>>