lcs問題
矩陣路徑問題(只能往右或往下)
其他線性dp
歸納模式二(相鄰選點)
歸納模式三(物品分配)
歸納模式四(線段覆蓋)
雜項歸納模式六
方法1,o(n2):暴力
int
main()
ans=
max(ans,f[i]);
} cout<}
方法2,o(nlogn):二分查詢
void
run(
int n)
} cout<}
int
main()
}for
(int i=n;i>=
1;i--)}
int ans=0;
for(
int i=
1;i<=n;i++
)ans=
max(ans,f[i]
+g[i]-1
);}
例題鏈結
int
main()
}}}long
long res=0;
for(
int i=
1; i<=n; i++
)ans[f[i]
]+=g[i]
;for
(int i=n; i>=
1; i--)}
}
#
include
using
namespace std;
const
int n=
5e4+
100;
long
long f1[n]
,f2[n]
,g1[n]
,g2[n]
,lcs=
-1e9
,a[n]
,b[n]
;int
main()
}if(lcs)lcs=f1[i];}
}for
(int i=n; i>=
1; i--)}
}}long
long sum=0;
for(
int i=
1; i<=n; i++
)for
(int i=
1; i<=n; i++
)return0;
}
code
int
main()
} cout<[m];
}
優化
例題1,書本整理
#
include
using
namespace std;
struct
ppp a[
1000];
intcmp
(ppp x,ppp y)
int n,t,f[
105]
[105];
void
init()
}for
(int i=
1; i<=n; i++
)f[i][1
]=0;
//只有一本書,自然以它結尾的sum=0
}int
main()
}}int ans=
1e9;
for(
int i=
1;i<=n;i++
)ans=
min(ans,f[i]
[t])
;//整理好的書的結尾可能是1,n的任意一本
cout
}
例題鏈結
#
include
#include
using
namespace std;
long
long f[
205]
[205
],a[
205]
,b[205
],v[
205]
[205];
intmain()
}for
(int j=
1;j<=m;j++
)f[0
][j]
=1e9
;for
(int i=
1;i<=n;i++)}
} cout<[m];
return0;
}
經典的線段覆蓋問題:一維座標系中,已知n個線段的左右端點座標
問題1:求不重合下的最長覆蓋例題設f[i]一維座標上從 0~i,線段的最長不重合覆蓋
vector儲存以線段右端點為下標的左端點座標
則有f[i]=max(f[vec[i][j]]+i-vec[i][j]),且f[i]由f[i-1]繼承
#
include
#include
#include
using
namespace std;
vector<
int>vec[
30005];
int f[
30005];
intmain()
for(
int i=
0;i<=
30000
;i++)}
cout<30000];
return0;
}
例題鏈結
int c[
205]
[205
],f[
205]
[205][
1005
],x[
1005];
intmain()
}for
(int p=
1; p<=n; p++
)cin>>x[p]
;for
(int i=
1;i<=l;i++
) f[1]
[2][
0]=0
; x[0]
=3;for
(int p=
1; p<=n; p++)}
}int ans=
1e9;
for(
int i=
1; i<=l; i++)}
cout<}return0;
}
例題1
例題2
動態規劃用法歸納
在實際應用中,展示動態規劃的用法。01揹包問題 include includeusing namespace std int val 5000 int wei 5000 int f 13000 inline int max int a,int b int main cout 大意 一共有n個管道,每...
線性動態規劃
準確來說,動態規劃是一種思想,而不是一種演算法。算導裡將它歸結為 高階程式設計技巧。線性dp最常見的有 子集和問題,lis問題,lcs問題。拓展之後有 子段和問題,雜類問題。子集和問題的乙個例項 s,t 其中,s 是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得s1中...
線性動態規劃
方格取數 題目 提交記錄 討論題解設有 n n 的方格圖,我們在其中的某些方格中填入正整數,而其它的方格中則放入數字0。如下圖所示 2.gif 某人從圖中的左上角 a 出發,可以向下行走,也可以向右行走,直到到達右下角的 b 點。在走過的路上,他可以取走方格中的數 取走後的方格中將變為數字0 此人從...