動態規劃-最大子矩陣和(ZOJ 1074 TO THE MAX )
題目:
有一個包含正數和負數的二維陣列。一個子矩陣是指在該二維陣列裡,任意相鄰的下標是1×1或更大的子陣列。一個子矩陣的和是指該子矩陣中所有元素的和。
本題中,把具有最大和的子矩陣稱為最大子矩陣。例如,如下陣列的最大子矩陣位於左下角,其和為15。
輸入
是N×N個整數的陣列。第一行是一個正整數N,表示二維方陣的大小。接下來是N2個整數(由空格和換行隔開)。該陣列的N2個整數,是以行序給出的。先是第一行的數,由左到右;然後是第二的數,由左到右,等等。N可能達到100,陣列元素的範圍是[-127,127]。
輸出:
輸出是最大子矩陣的和。
思路:
1、此問題是“最大欄位和”問題的推廣。
2、程式碼具體過程如下:
程式碼:
#include<cstdio>
#include<cstring>
int n;
int a[110][110];
int b[110];
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
scanf("%d",&a[i][j]);
int Max = -32767;
for(int i=0; i<n; i++)
{
//陣列b表示i~j行,對應列元素的和
//將二維動態規劃問題轉化為一維動態規劃問題
memset(b, 0, sizeof(b));
for(int j=i; j<n; j++)
{
//下面是針對陣列b求最大子段和的動態規劃演算法
int sum=0;
for(int k=0; k<n; k++)
{
b[k] += a[j][k];
sum += b[k];
if(sum<0) sum = b[k];
if(sum>Max) Max = sum;
}
}
}
printf("%d\n",Max);
}
return 0;
}
相關文章
- 最大子陣——動態規劃DP動態規劃
- POJ 1050-To the Max(最大子矩陣和)矩陣
- 動態規劃&矩陣連乘動態規劃矩陣
- 最大子矩陣和矩陣
- 動態規劃-ZOJ 1 163 THE STAIRCASES動態規劃AI
- 矩陣連乘(動態規劃演算法)矩陣動態規劃演算法
- 動態規劃求解矩陣累計和最大的路徑動態規劃矩陣
- hdu1074動態規劃狀態壓縮動態規劃
- 矩陣連乘問題 Python 動態規劃矩陣Python動態規劃
- 動態規劃求解最大子段和 (兩種寫法+還原最優解)動態規劃
- 動態規劃-ZOJ 1025-WOODEN STICKS動態規劃
- 動態規劃---例題3.最大子段和問題動態規劃
- 最大子段和 | 最大子矩陣 | 最大M子段和矩陣
- 動態規劃6:臺階問題和矩陣最小路徑問題動態規劃矩陣
- 動態規劃_備忘錄法_矩陣鏈乘問題動態規劃矩陣
- poj1050 最大子矩陣和矩陣
- 順序表應用8:最大子段和之動態規劃法動態規劃
- #1502 : 最大子矩陣矩陣
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- 動態規劃求最長降序序列動態規劃
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 分治法 && 動態規劃 洛谷P1115 最大子段和動態規劃
- 狀態壓縮動態規劃 -- 炮兵陣地動態規劃
- 【動態規劃(一)】動態規劃基礎動態規劃
- 動態規劃-最長上升子序列模型動態規劃模型
- 動態規劃(最長公共子序列LCS)動態規劃
- 動態規劃---求硬幣最優解動態規劃
- 動態規劃動態規劃
- [動態規劃] 六、最長迴文子串動態規劃
- 動態規劃7:最長上升子序列LIS動態規劃
- 動態規劃最大欄位和動態規劃
- DP 動態規劃入門 一維陣列動態規劃陣列
- ZOJ 3772 Calculate the Function(線段樹+矩陣)Function矩陣
- openjudge1768 最大子矩陣[二維字首和or遞推|DP]矩陣
- 動態規劃求解最長上升子序列問題動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃