首先要熟悉一下最大子段和(即最大連續子串的和),給一串數字,找到最大子段和的值。
一般方法是dp,
dp[i]表示以a[i]為結尾的最大子段和,那麼dp[i]=max(dp[i-1]+a[i],a[i]);(即,當dp[i-1]<0時,dp[i]=a[i],否則dp[i]=dp[i-1]+a[i];)
有了一維的基礎,現在來看看矩陣的情況。
設陣列tal的每乙個元素為第r行到第i行的對應列元素之和。(即tal[k]=map[r][k]+map[r+1][k]+...+map[i][k]);
那麼最大矩陣和,就變成了一維的最大子段和。
列舉第r行到第i行,找到最優值。
#include#include#include#include#define max 111
using namespace std;
int map[max][max];
int tal[max];
int ans,n;
int dp() //求最大子段和函式
return m;
}int main()
for(r=1;r<=n;r++) //第r行
int temp=dp();
if(ans
poj1050最大子矩陣和
這篇是看了別人的報告寫的,就當是屢屢思路好了.題目大意。給定乙個n階矩陣 方陣 每個元素中存在乙個數字.任務就是求出乙個最大的子矩陣使得矩陣元素之間的和是最大的.n 100 1.矩陣a m n 的和可以直接 sum a i j i 0 to n 1 j 0 to n 1 還可以求出第i列的和p i ...
POJ 1050 最大子矩陣和
題意 有乙個包含正數和負數的二維陣列。乙個子矩陣是指在該二維陣列裡,任意相鄰的下標是1 1或更大的子陣列。乙個子矩陣的和是指該子矩陣中所有元素的和。思路 首先需要會一維的最大子串行和 把該問題轉化為最大連續子串和問題,即二維轉化為一維。假設求出的最大子矩陣為從x行到y行,從第c列到第r列,則該矩陣轉...
poj 1050 最大子矩陣和
最大子矩陣和的方法和最大欄位和一樣 先單獨對每行求最大欄位和 此時,子矩陣的行為1,就是最大欄位和了 然後,把第i行後的各行對應列的元素加到第i行的對應列元素,每加一行,就求一次最大欄位和,這樣就把子矩陣的多行壓縮為一行了,一行了就是最大欄位和了 也可以這樣理解 a11 a12 a13 a21 a2...