print? 1.對於一維問題,求解乙個序列中的連續子段的最大和。
狀態:一維陣列dp[i]:以i結尾的最大子段和,並非前i項的最大子段和,二者有區別。
轉移:if dp[i]>0
dp[i+1]=dp[i]+a[i]
else
dp[i+1]=dp[i]
ans=max(dp[k];k=1,2,....n),
空間上可以用滾動陣列的原理優化,空間複雜度o(1)。
if ans>0 dp+=a[i]
else dp=a[i]
ans=max(dp)
hoj 1760 the jackpot
2.二維。
預處理出每行(列)的和,sum[i][j]表示第i行第1->j列的和。
用o(n^3)的複雜度列舉所有的矩形,列舉乙個行,兩個列。
對於乙個矩形,行都縮為乙個點,對列轉化成為一維問題處理。
hoj 2558 maxsum
3.三維
和二維轉化成一維的情況完全類似。
先預處理出底面(或其他面)的二維矩陣和。
sum[i][j][k]:第i層,對角端點為(1,1)和(j,k)的矩陣的元素和。
然後用o(n^5)的複雜度列舉所有的立方體,將底面縮為乙個點,對剩下一維作為一維處理。
hoj 2555
1.對於一維問題,求解乙個序列中的連續子段的最大和。
狀態:一維陣列dp[i]:以i結尾的最大子段和,並非前i項的最大子段和,二者有區別。
轉移:if dp[i]>0
dp[i+1]=dp[i]+a[i]
else
dp[i+1]=dp[i]
ans=max(dp[k];k=1,2,....n),
空間上可以用滾動陣列的原理優化,空間複雜度o(1)。
if ans>0 dp+=a[i]
else dp=a[i]
ans=max(dp)
hoj 1760 the jackpot
2.二維。
預處理出每行(列)的和,sum[i][j]表示第i行第1->j列的和。
用o(n^3)的複雜度列舉所有的矩形,列舉乙個行,兩個列。
對於乙個矩形,行都縮為乙個點,對列轉化成為一維問題處理。
hoj 2558 maxsum
3.三維
和二維轉化成一維的情況完全類似。
先預處理出底面(或其他面)的二維矩陣和。
sum[i][j][k]:第i層,對角端點為(1,1)和(j,k)的矩陣的元素和。
然後用o(n^5)的複雜度列舉所有的立方體,將底面縮為乙個點,對剩下一維作為一維處理。
hoj 2555
動態規劃 最大子段和
給定乙個陣列a a0,a1,a2,an 求陣列中 連續子段之和 的最大值。1 最簡單的演算法 窮舉法 計算所有的連續子段之和,得出最大值 窮舉法 計算所有的子串行和 o n 3 public static int maxsum1 int data max tmp max tmp max return...
動態規劃 最大子段和
題目描述 給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入輸出格式 輸入格式 第一行是乙個正整數nn,表示了序列的長度。第二行包含n個絕對值不大於10000的整數a i,描述了這段序列。輸出格式 乙個整數,為最大的子段和是多少。子段的最小長度為1。輸入輸出樣例 輸入樣例 1 72 4 3 ...
動態規劃 最大子段和
動態規劃 最大子段和 lyk喜歡幹一些有挑戰的事,比如說求區間最大子段和。它知道這個題目有o n 的做法。於是它想加強一下。也就是說,lyk一開始有n個數,第i個數字是ai,它找來了乙個新的數字p,並想將這n個數字中恰好乙個數字替換成p。要求替換後的最大子段和盡可能大。lyk知道這個題目仍然很簡單,...