(動態規劃DP演算法)To the Max
15
解題報告:
這道題是求二維子陣列之和的最大值,詳細的解釋在程式設計之美2.15節有講過,我的演算法就是程式設計之美上提到的。
演算法思路主要就是列舉行,設b[i][j]代表第j列中前i行的資料之和。那麼,第m行到第n行間的第j列資料之和就是b[m][j]-b[n-1][j]。
這樣按行列舉後,題目就轉化為求一維子陣列之和的最大值,這裡的一維子陣列就是行間的各個列的資料之和所組成的陣列。
程式碼:
#include <iostream> #include <cstring> using namespace std; int a[105][105]; int b[105][105]; int main() { int n,i,j,k,all=0,sum=0,max=0; cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) cin>>a[i][j]; for(j=1;j<=n;j++) { b[1][j]=a[1][j]; b[0][j]=0; } for(j=1;j<=n;j++) { for(i=2;i<=n;i++) { b[i][j]=b[i-1][j]+a[i][j]; } } for(i=1;i<=n;i++)//從i行到j行加和 { for(j=i;j<=n;j++) { all=b[j][1]-b[i-1][1]; sum=b[j][1]-b[i-1][1]; for(k=2;k<=n;k++) { if(sum<0) sum=0; sum+=b[j][k]-b[i-1][k]; if(sum>all) all=sum; } if(all>max) max=all; } } cout<<max<<endl; return 0; }
相關推薦
(動態規劃DP演算法)To the Max
15 解題報告:這道題是求二維子陣列之和的最大值,詳細的解釋在程式設計之美2.15節有講過,我的演算法就是程式設計之美上提到的。演算法思路主要就是列舉行,設b[i][j]代表第j列中前i行的資料之和。那麼,第m行到第n行間的第j列資料之和就是b[m][j]-b[n-1][j]。這樣按行列舉後,題目就轉化
【動態規劃】[POJ 1050]To the Max
就是最大矩陣和,如果直接爆搜複雜度就是O(n4)的所以進行優化,sum[i][j][k]表示在第i列到第j列的第k行的和,那麼就列舉i, j然後最大子段和,然後就變成O(n3)了, 反正n只有100就過
poj 1050-小白演算法練習 to the max 動態規劃
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 49226 Accepted: 26074 Description Given a two-dimensional arr
HDOJ 1081(ZOJ 1074) To The Max(動態規劃)
Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array o
動態規劃DP演算法實現全排列
/* * 全排列 * 無相同元素 * 1. 取第1個元素插入空字串, 1種情況 * 2. 取第2個元素插入長度為1的字串, 1*2 = 2種情況, 例如 'b'插入"a",可以在'a'前, 'a'後 * 3. 取第3個元素插入長度為2的字串, 2*3 = 6種情況, 例
華為校招第三題:字串變換最小費用(動態規劃DP問題)
題目: 給出兩個字串A,B。將A字串轉化為B字串,轉化一共有兩種方式:刪除連續的n個字元,一次操作費用為2。增加連續的n個字元(增加的字元是什麼由你決定),一次操作費用為n+2。求把A變為B最小費用。 輸入: 第一行輸入一個正整數T(1 <= T &
【POJ-1050】To The Max(動態規劃)
ref script greate err sca max des eat tput To the Max Time Limit: 1000MS Memory Limit: 10000K Description Given a two-dimensional array
D - To the Max POJ - 1050 (動態規劃)
D - To the Max POJ - 1050 Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array
poj 1050 To the Max(動態規劃處理二維最大子段和)
2、題目大意: 給一個N,然後給定一個N*N的二維陣列,然後求一個子矩陣,使得其中的數加起來和最大 3、思路: 將二維陣列轉換成一維陣列,假設二維陣列是M行N列,那麼將二維陣列分成N條,用dp[i]記錄第i列的和(可以是任意連續長度,for迴圈就能實現),那麼將dp[i]
zoj1074 TO THE MAX(動態規劃)
1、問題描述 2、用陣列b表示陣列a的i~j行對應列元素的和,然後對陣列b計算最大欄位和,這就將二維動態規劃問題轉化為一維動態規劃的問題。 #include <iostream> #include<cstring> using nam
POJ 1050 To the Max(動態規劃)
Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the
hdu 1081 (最大子矩陣和)dp To The Max
Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of
poj1050 To the Max (動態規劃)
題目意思: 給出一個矩陣。求出和最大的子矩陣,在解決這個問題的之前,首先看一下這個問題的一維問題,給出一個序列求最大子序列。滿足i<=i<=j<=n 求出最大的i-->j的和。
動態規劃之To the Max
The input consists of an N * N array of integers. The input begins with a single positive integer N on a line by itself, indicating the size of the square
【視覺-立體視覺】全域性匹配演算法SGBM實現(含動態規劃DP)詳解
最近一直在學習SGBM演算法,作為一種全域性匹配演算法,立體匹配的效果明顯好於區域性匹配演算法,但是同時複雜度上也要遠遠大於區域性匹配演算法。演算法主要是參考Stereo Processing by Semiglobal Matching and Mutual Informa
c++使用樸素遞迴演算法(自頂向下遞迴)和動態規劃dp(帶備忘的自頂向下,自底向上)解決鋼條切割及執行例項結果
本博文資料來源於演算法導論第三版 動態規劃有兩種等價實現方法:帶備忘的自頂向下發(topDownWithMemoization),自底向上方法,付出額外的記憶體空間來節省計算時間,是典型的時空權衡,遞迴時會儲存每個子問題的解 長度n與對應價格p關係 1~10的對應最
【演算法之動態規劃(一)】動態規劃(DP)詳解
一、基本概念 動態規劃(dynamic programming)是運籌學的一個分支,是求解決策過程(decision process)最優化的數學方法。20世紀50年代初美國數學家R.E.Bellman等人在研究多階段決策過程(multistep d
藍橋杯 ALGO-3 演算法訓練 K好數 (動態規劃 DP)
如果一個自然數N的K進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是K好數。求L位K進位制數中K好數的數目。例如K = 4,L = 2的時候,所有K好數為11、13、20、22、30、31、33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。
To the Max 二維dp(一維的變形)
hole may b- separate 轉化 ima first lin con Description Given a two-dimensional array of positive and negative integers, a sub-rectangl
九章演算法高階班筆記6.動態規劃(下)
區間類DP Stone Game Burst Ballons Scramble String 匹配類動規 Longest Common Subsequence Edit Distance K Edit Distance Distinct Subqu