(1)動態規劃

2021-09-25 20:27:25 字數 1329 閱讀 6932

給定乙個長度為n的數字序列,對於每乙個1<=k<=n,希望能求解出所有長度為k的連續子串行的最大值中的最小值。

輸入描述:

第一行數字n

接下來一行是乙個長度為n的數字序列

1<=n<=100000, 0<=ai<=10^5

輸出描述:

一行n個數字,第i個數字表示k=i時的答案。

示例1:輸入6

1 3 2 4 6 5

輸出1 3 3 4 6 6

#include

#include

using namespace std;

intmain()

vector<

int>

minvec

(n,0);

for(

int k =

1; k <= n;

++k)

//子串行的長度從1到n

if(min > max)

min = max;

} minvec[k -1]

= min;

}for

(int i =

0; i < n;

++i)

cout << minvec[i]

<<

" ";

return0;

}

解析2:動態規劃
#include

#include

using namespace std;

intmain()

vectorint>>

dp(n, vector<

int>

(n,0))

;//dp

for(

int i =

0; i < n;

++i)

} vector<

int>

minvec

(n, maxofall)

;for

(int i =

0; i < n;

++i)

for(

int j = i; j < n;

++j)

minvec[j - i]

= minvec[j - i]

< dp[i]

[j]? minvec[j - i]

: dp[i]

[j];

for(

int i =

0; i < n;

++i)

cout << minvec[i]

<<

" ";

return0;

}

動態規劃1

維基百科 動態規劃是一種在數學和 電腦科學 中使用的,用於求解包含 重疊子問題 的最優化 問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於電腦科學和工程領域。比較著名的應用例項有 求解 最短路徑 問題,揹...

動態規劃 1

動態規劃是對最優化問題的一種新的演算法設計方法。由於各種問題的性質不同,確定最優解的條件也互不相同,因而動態規劃的沒計法對不同的問題,有各具特色的表示方式。不存在一種萬能的動態規劃演算法。但是可以通過對若干有代表性的問題的動態規劃演算法進行討論,學會這一設計方法。多階段決策過程最優化問題 動態規劃的...

動態規劃1

首先,動態規劃的最基本要求在於無後效性 即結果態之和之前某態有關,並且對於該之前態我們並不關心它到底是怎麼來的 和n到n 1的跳躍一樣,它也是依賴轉移方程得來。比如0 1揹包 我們只要永遠依賴dp i j max dp i 1 j,dp i 1 j wi vi 這個轉移方程即可,並不在乎它具體細節。...