這篇是看了別人的報告寫的,就當是屢屢思路好了.
題目大意。給定乙個n階矩陣(方陣),每個元素中存在乙個數字.任務就是求出乙個最大的子矩陣使得矩陣元素之間的和是最大的.
n=100;
1.矩陣a[m][n]的和可以直接 sum+=a[i][j] ( i = 0 to n-1 j=0 to n-1); 還可以求出第i列的和p[i],再將所在列加起來,(當然行是同理的).
2.因此所選的矩陣的行k可以列舉(0<=k<=n-1),此時可以現將列加起來,然後找到這些列中連續最大和即可.這就是選出的矩陣最大和.
3.在所有矩陣中選出最大和的乙個。
/*source code
problem: 1050 user:
memory: 388k time: 32ms
language: gcc result: accepted
source code*/
#include int max(int a,int b)
int main();
scanf("%d",&n);
for(i=0;i0?d[k-1]+add[k]:add[k];
ans=max(ans,d[k]);}}
}printf("%d\n",ans);
return 0;
}
poj1050 (最大子矩陣和)
首先要熟悉一下最大子段和 即最大連續子串的和 給一串數字,找到最大子段和的值。一般方法是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 有了一維的基礎,現在來看看矩陣...
POJ 1050 最大子矩陣和
題意 有乙個包含正數和負數的二維陣列。乙個子矩陣是指在該二維陣列裡,任意相鄰的下標是1 1或更大的子陣列。乙個子矩陣的和是指該子矩陣中所有元素的和。思路 首先需要會一維的最大子串行和 把該問題轉化為最大連續子串和問題,即二維轉化為一維。假設求出的最大子矩陣為從x行到y行,從第c列到第r列,則該矩陣轉...
poj 1050 最大子矩陣和
最大子矩陣和的方法和最大欄位和一樣 先單獨對每行求最大欄位和 此時,子矩陣的行為1,就是最大欄位和了 然後,把第i行後的各行對應列的元素加到第i行的對應列元素,每加一行,就求一次最大欄位和,這樣就把子矩陣的多行壓縮為一行了,一行了就是最大欄位和了 也可以這樣理解 a11 a12 a13 a21 a2...