2019 11 09 校內模擬

2021-09-29 11:40:09 字數 1409 閱讀 7930

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

log⁡n)

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 連出...