nyoj 104 最大和 【压缩矩阵 DP求最大连续子序列的和】
来源:互联网 发布:单例模式 java enum 编辑:程序博客网 时间:2024/05/29 09:08
最大和
时间限制:1000 ms | 内存限制:65535 KB
难度:5
- 描述
给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。
例子:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
其最大子矩阵为:9 2
-4 1
-1 8
其元素总和为15。- 输入
- 第一行输入一个整数n(0<n<=100),表示有n组测试数据;
每组测试数据:
第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;
随后有r行,每行有c个整数; - 输出
- 输出矩阵的最大子矩阵的元素之和。
- 样例输入
14 40 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
- 样例输出
15
矩阵压缩:详解看我上一篇hdoj1081
#include<stdio.h>#include<string.h>#define MAX 100+10int map[MAX][MAX];int dp[MAX][MAX];int max(int x,int y){ return x>y?x:y;}int main(){ int n,r,c,k,i,j; int sum,maxsum,s; scanf("%d",&n); while(n--) { scanf("%d%d",&r,&c); memset(dp,0,sizeof(dp)); for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { scanf("%d",&map[i][j]); if(i==1) dp[i][j]=map[i][j]; else dp[i][j]=map[i][j]+dp[i-1][j]; } } maxsum=-1000; for(i=1;i<=r;i++) { for(j=i;j<=r;j++) { sum=dp[j][1]-dp[i-1][1]; s=0; for(k=1;k<=c;k++) { s+=dp[j][k]-dp[i-1][k]; if(s>sum) sum=s; if(s<0) s=0; } maxsum=max(maxsum,sum); } } printf("%d\n",maxsum); } return 0;}
0 0
- nyoj 104 最大和 【压缩矩阵 DP求最大连续子序列的和】
- ZOJ1074 最大和子矩阵 DP最大连续子序列
- 求连续子序列的最大和
- 求最大连续子序列的和
- 求最大连续子序列的和
- Maximum Sum 最大子矩阵和+dp+(最大连续子序列的变形)
- HDU--1231 : 最大连续子序列 (DP求连续子序列最大和)
- NYOJ 104 最大和(求最大子矩阵)
- NYOJ 44 & 104 - 最大连续子串和(矩阵最大子矩阵和)
- 求连续子序列最大和
- 求数组最大连续子序列和
- 求最大连续子序列和
- HDU 1081 最大子矩阵(求最大连续子序列和)
- HDU1003(最大连续子序列和DP)
- 【经典DP】最大连续子序列和
- HDU1231 最大连续子序列【最大子段和+DP】
- 【算法小总结】最大连续子序列和最大连续子矩阵的关系与实现
- 最大连续子序列和最大连续子矩阵的关系与实现
- Combination Sum 全排列求和
- MySQL中找出数据库中表名以cf_打头的所有表的方法
- Combination Sum II 全排列求和无重复
- java自学笔记————IO流中的键盘输入流和输出流详解;
- [LeetCode] Number of Islands
- nyoj 104 最大和 【压缩矩阵 DP求最大连续子序列的和】
- UVA 11090 - Going in Cycle!!(最短路`Bellman-Ford)
- 非常有用的android控件编程
- [转]python 大文件以行为单位读取方式比对
- 约瑟夫环问题
- 关于CoreData和SQLite多线程访问时的线程安全问题
- HDU 4821 String (2013长春现场赛I题) 字符串Hash
- Linux基础:如何找出你的系统所支持的最大内存
- Multiply Strings 大数相乘