【动态规划】最大子矩阵之和
生活随笔
收集整理的這篇文章主要介紹了
【动态规划】最大子矩阵之和
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最大子矩陣
Description
給出一個N [2<=N<=100],并給出一個N*N的矩陣,矩陣中的數(shù)為[-127,127]之間。求出矩陣中一塊子矩陣的最大和。
比如:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
和最大的子矩陣應該是這個:
9 2
-4 1
-1 8
它的和是15。
Sample Input
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-18 0 -2
Sample Output
15
解題方法
用一個數(shù)來求出每一個數(shù)的前綴和,再將每一段序列當作一個數(shù),再把每行的這個序列用最大連續(xù)數(shù)列的方法做。
#include<cstdio> #include<iostream> using namespace std; int n,m,x,sum,a[100][100]; int main() {scanf("%d",&n);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){scanf("%d",&x);a[i][j]=a[i][j-1]+x;//求前綴和}for (int first=1;first<=n;first++)//枚舉序列的前面一個數(shù)for (int last=1;last<=first;last++)//枚舉序列的后面一個數(shù){x=0;for (int i=1;i<=n;i++){x+=a[i][first]-a[i][last-1];//最大連續(xù)數(shù)列sum=max(sum,x);if (x<0) x=0;}}if (sum>0) printf("%d",sum);else printf("NO"); }總結
以上是生活随笔為你收集整理的【动态规划】最大子矩阵之和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 普联的路由器如何破解校园网如何破解校园网
- 下一篇: 【动态规划】石子合并