t1 排兵布陣
這是原題啊。。
題解在這裡看。
#include
using
namespace std;
const
int n=
105,m=
20005
;int s,n,m,a[n]
[n],v[n]
,w[n]
,val[m]
,f[m]
;int
main()
for(
int j=m;j>=0;
--j)
for(
int k=
1;k<=tot;
++k)
if(j>=v[k]
) f[j]
=max
(f[j]
,f[j-v[k]
]+w[k]);
}printf
("%d\n"
,f[m]);
return0;
}
t2 小 x 的二叉樹
演算法的思路題解寫的很清楚了,我補充一下複雜度的證明。
這有點類似於啟發式合併,我們每次花費長度更小的區間的代價,將乙個區間分成兩個區間。
所以複雜度是 o(n
logn)
o(n\log n)
o(nlogn)
的。
#include
using
namespace std;
namespace io
template
<
typename t>
inline t read()
inline
intin()
}using io::in;
const
int n=
2e5+5;
int n,k,a[n]
;int log[n]
,mx[n][18
],mn[n][18
];void
init()
intgetmax
(int l,
int r)
intgetmin
(int l,
int r)
bool
solve
(int l,
int r)
return0;
}int
main()
return0;
}
t3 特技飛行
還沒有寫,再理解一下,有時間再調。
校內模擬 鎖
沒有標籤是因為我真的不知道這算什麼型別 這題我說不來大意你們還是看題面描述吧 小z住的房子一共有n個人,他們每人有乙個重要度。房子的門上可以裝若干把鎖。假設共有k把鎖,命名為1到k。每把鎖有一種對應的鑰匙,也用1到k表示。鑰匙可以複製若干份並發給任意多個居民。每個人都可以持有若干鑰匙,可以不持有鑰匙...
校內模擬 assignment(DP)
題面見校內oj4693 考慮預處理f k i j f k i j f k i j 表示最長的一段不超過k kk的時候,將長度為i ii的序列分為j jj段的方案數。在k kk相同的狀態之間轉移,顯然有f i j f i 1 j f i 1 j 1 f i k 1 j 1 f i j f i 1 j ...
2019 10 03 校內模擬
內網傳送門 很明顯的乙個網路流。轉換一下題意,相當於求保留航線的最大值。所以我們把邊權取負跑最小費用流。有乙個坑點,就是我們只需要費用最小,不要求流量最大,所以不應該用最小費用最大流。有兩個解決辦法 用最小費用可行流。連 i,t,1,0 i,t,1,0 i,t,1 0 的邊,表示不選 i ii 連出...