顧名思義:區間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資料報中含有傳送它的主機的位址 ...