link
(似乎很久沒寫題解了)
n個物品,每個物品有a,b兩個值,給定a,b,現在最多選其中m個,要求最大化選出的物品中【b權值和的b次方-a極差的a次方】。
$n\leq 2\times 10^5,m\leq 50.$
大概全場最早ac的兩人是miaom&wzf2000,用了非標算的「神奇的做法」,太強辣。
按照a排序以後轉化為選定乙個區間以後最大化區間內部的b權值和。
然後考慮兩種情況:
第一種情況暴力,第二種用鍊錶維護,從小到大刪去數,那麼每次選擇的同樣是連續一段。
時間複雜度$\mathcal(nm)$。
1 #include2view code#define rep(i,x,y) for (int i=(x);i<=(y);i++)
3#define ll long long
4#define inf 1000000001
5#define y1 y1___
6using
namespace
std;
7ll read()
13#define n 300005
14int
n,m,a,b,id[n],l[n],r[n];ll ans,a1[n],a2[n],b1[n],b2[n];
15struct
node
18 node(int a_,int b_)
19}q[n];
20bool cmp(node x,node y)
21bool cmp2(int x,int y)
22void
upd(ll x,ll y)
26int
main()41}
42 rep (i,1,n)
50 rep (j,0,m-1) upd(b1[j]+b2[m-j-1],a2[m-j-1]-a1[j]);
51 r[l[x]]=r[x],l[r[x]]=l[x];52}
53 cout
;54return0;
55 }
uoj386 UNR 3 鴿子固定器 貪心
題目鏈結 題解 考慮先把序列按 s s 排序後,將 v role presentation style position relative v v從小到大從中刪去,刪去時用包含它的區間更新答案。為什麼答案一定是一段區間 由於數列中剩下的數 v v 沒有比當前數更小的。用反證法,如果不是一段區間,那麼...
UOJ 308 UNR 2 UOJ拯救計畫
uoj 如果模數很奇怪,我們可以插值一下,設 f i 表示用了 i 種顏色的方案數。然而模 6 這個東西很有意思,6 2 3 所以我們只需要考慮其模 2 和模 3 的結果了。而最終答案的貢獻是 sum k a i f i 當 i ge 3 的時候 6 a k i 所以我們只需要知道 f 0 f 1 ...
uoj308 UNR 2 UOJ拯救計畫
傳送門 題解 考慮列舉用了 i 所學校,那麼貢獻為 cnt i 意思是從 k 所選 i 所出來染色,cnt 為固定顏色順序的染色方案,i 為可以交換學校位置。考慮當 i geq 3 的時候,貢獻含有模數因子6,所以模6為0,相當於沒有貢獻。當 i 1 顯然只有 m 0 有貢獻。對於 m 0 我們特判...