今天講的全是dp...
不多廢話,先看一道經典的模板lis(最長不下降子串行)
一.lis
給定乙個長度為n的數列,求最長上公升子串行
例:1 7 2 8 3 4
答案:1 2 3 4
**:
1 #include //突然想用萬能庫 23
using
namespace
std;45
const
int maxn = 100000;6
int n, data[maxn], dp[maxn], from[maxn];//
方案 7
void output(intx)8
13int
main()
1429
} 30}
3132
int ans = dp[1], pos = 1;33
for(int i = 1; i <= n; i++)
34if(ans 35
39 cout40output(pos);
41return0;
42 }
二.揹包問題
揹包就不多講了,揹包九講裡面非常明白了,也是很基礎的dp
n個物品,每個物品有價值和體積兩個屬性
從中選出若干個物品,體積和不超過v 要求選出的物品價值和最大
每個物品只能選一次(01揹包)
體積可能是多維(多維揹包)
物品可以被選的次數可能是有限次或者無限次(完全揹包)
物品之間可能存在依賴(依賴揹包)
三.st表
思想:倍增、dp(狀態轉移方程: f[i,j] = min/max (f[i,j - 1],f[i + 2^(j - 1),j - 1]) )
功能:求任意區間的最大值
要求:靜態的,無法修改資料
空間複雜度:o(nlogn)
時間複雜度:o(nlogn) – o(1)
#include #includeusing
namespace
std;
intconst maxn = 1000000
;int st[maxn][20
], a[maxn], ans[maxn];
intn, m, left, right, j, i;
intmain()
for(j = 1; (1
<)
for(i = 1; i <= n-(1
<1; i++)
st[i][j] = min(st[i][j-1] , st[i+( 1
<<(j-1) )][j-1
]);
for(i = 1; i <= m; i++)
for(i = 1; i <= m; i++)
printf(
"%d
",ans[i]);
return0;
}
還有一部分...待我再細細思考總結...(說白了就是現在還不太明白)
工程時間培訓Day4
89的改變 1 增加restrict指標 c99中增加了公適用於指標的restrict型別修飾符,它是初始訪問指標所指物件的惟一途徑,因此只 有借助restrict指標表示式才能訪問物件。restrict指標指標主要用做函式變元,或者指向由malloc 函式所分配的記憶體變數。restrict資料型...
學大偉業 2017 國慶 Day1
期望得分 100 100 20 220 實際得分 100 100 20 220 好久沒有期望 實際了 對於 a。a 如果 第1個a 後面出現的第1個b z 是右端點,且在第2個a之前,那麼有貢獻 如果 第2個a 前面出現的第1個b z 是左端點,且在第1個a之後,那麼有貢獻 最後的貢獻 2 dis ...
Python學習總結Day4
1 窗體左上角為座標原點 turtle.setup width,length,startx,starty 非必須 設定窗體的大小及位置,前兩個是窗體的大小,及長寬,後兩個是位置,相對螢幕左上角的位置 可選 1 絕對座標 海龜在畫布的正中心,執行方向為向著畫布的右側,右方向為x軸 turtle.got...