題解 Loj2727舞會

2022-06-08 08:06:10 字數 852 閱讀 1612

\(n\)個數,其中有\(m\)個位置的數是確定的,另外的數隨意排列。每次操作把最前面三個數取出,把它們的中位數取出來放到最後,然後刪掉這三個數。通過合適的排列,使最後留下來的數最大。

首先這類有關中位數的問題,可以二分後轉化為操作\(01\)序列的問題。每次二分乙個有可能的答案\(mid\),把\(>=mid\)換成一,\(的數換成零,位置確定的直接換,位置沒確定的統計一的個數,考慮\(dp\)解決。

注意到每個位置對應的下一步操作呈現出樹的結構,三叉樹。簡單來說,我們可以每次新建乙個節點(從\(n+1\)開始),這個節點的三個兒子就是序列前三個數的位置,反覆操作,直到建出根節點。

設\(dp[i]\)為\(i\)節點若要能合成\(1\)(滿足最後剩下的數\(>=mid\))最少需要的「1」的個數。那轉移的時候,就只要先把三個兒子的\(dp\)求出來,因為只要有兩個兒子的變成\(1\) ,父節點就可以變成\(1\),所以選兒子中較小的兩個就可以啦。

#include#define n (200010)

using namespace std;

int n,m,tot,ans,q[n],a[n],pos[n],st[n];

int s1[n],s2[n],s3[n],dp[n];

inline int read()

return w;

}inline void build(int num)

dfs(tot);//dp根節點

return dp[tot]<=pd;//看根節點需要的1的數量是否小於提供的1的數量

}int main()

printf("%d\n",ans);

return 0;

}

Loj2003 SDOI2017 新生舞會

這道題太明顯了,一眼看過去就知道是0 1分數規劃。先用二分列舉mid,假設mid就是c 我們要判斷的是 a 1 a2 a nb1 b2 b n c frac c b1 b2 bn a1 a2 an c 然後我們就可以把分母乘到c上面去,得到 a 1 a2 a n c b1 b2 b n a 1 a ...

題解 沒有上司的舞會

5401 沒有上司的舞會 動態規劃 例題 5401 沒有上司的舞會 我是萌新 剛學oi,請問這道樹上dp怎麼做?太難了不會啊 看了題解才會的。dp i,1 0 表示.算了太難了講不清楚.不會怎麼dfs,只會常數記憶體都更小的bfs,球大神教我 winlere include include incl...

沒有上司的舞會(題解)

作為人生中的第一道樹形dp題,寫一篇題解也是很有意義的。沒有上司的舞會 某大學有n個職員,編號為1 n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數ri,但是呢,如果某個職員的上司來參加舞會了...