簡析 區間DP

2021-09-13 04:03:24 字數 1459 閱讀 2703

顧名思義:區間dp就是在區間上進行動態規劃,求解一段區間上的最優解。主要是通過合併小區間的 最優解進而得出整個大區間上最優解的dp演算法。

for

(int len =2-

> n)

//列舉長度

}

例題:石子歸併

傳送門

dp方程式:

dp[i]

[end]

=min

(dp[i]

[j]+dp[j+1]

[end]

)+sum[end]

-sum[i-1]

;

第i堆到第end堆的合併的最小分數可以看做是:

最小的(左堆最小分數+右堆最小分數+合併分數)

#include

#include

#include

using

namespace std;

#define maxn 0x3f3f3f3f

int s[

110]

,sum[

110]

,dp[

110]

[110],

n;int

main()

for(

int len =

2; len <= n; len++

)//列舉長度

} cout << dp[1]

[n];

return0;

}

例題:石子合併

傳送門

很明顯,本題是上題的進化版,無論選擇哪個斷點,都有可能是最優解,甚至是最爛解。然而這並不重要,因為我們可以將它轉化為線性,通過開兩倍陣列解決這個問題。

#include

#include

#include

#define maxn 0x3f3f3f3f

using

namespace std;

int s[

410]

,sum[

410]

,dp[

410]

[410],

n,ans;

intmain()

for(

int i = n+

1; i <=

2*n; i++

)for

(int len =

2; len <= n; len++

)}ans = maxn;

for(

int i =

1; i <= n; i++

)//尋找最小值

ans = min (ans,dp[i]

[i+n-1]

);cout << ans;

return0;

}

線性dp 區間dp

1 尼克的任務 額一道挺水的題,愣是做了幾個小時 動態規劃大致的思路還是找乙個轉移 換個詞就是影響 我們可以明顯看出本題的規則 空暇時,一遇到任務必須挑乙個接 求1 n時間內最大空暇時間 所以將任務排序是必要的,兩個關鍵字 再來想象一下當我做到第i 個任務時,我在 st i st i t i 1 時...

strtok函式簡析

官方的strtok函式,用來通過分隔字元 不支援字串,傳入的串中每個字元單獨當分隔符,如下例子組合的如123會處理1而23會被跳過 返回分隔的串的首位址 比如呼叫strtok abc123def 123456 返回值是指向abc的指標 下次要獲得 def 需要呼叫strtok null,123456...

IP tcp udp 概念 簡析

ip層接收由更低層 網路介面層例如 乙太網裝置驅動程式 發來的資料報,並把該資料報傳送到更高層 tcp或udp層 相反,ip層也把從tcp或udp層接收來的資料報傳送到更低層。ip資料報是不可靠的,因為ip並沒有做任何事情來確認資料報是按順序傳送的或者沒有被破壞。ip資料報中含有傳送它的主機的位址 ...