洛谷 P3757 CQOI2017 老C的鍵盤

2022-05-08 17:36:14 字數 688 閱讀 3049

luogu

其實就是一顆二叉樹

我們假設左兒子小於根,右兒子大於根

考慮樹形\(dp\)

\(f[u][i]\)表示以\(u\)為根的子樹,\(u\)為第\(i\)小

那麼考慮子樹合併

其實就是兩個序列的合併

如果是左子樹

列舉\(j\)為子樹內有多少個數小於其根

那麼以\(i\)為根的子樹一定至少有\(j\)個

那麼我們換一下列舉的東西

改成列舉有多少個數小於\(u\)

剩下的問題就是分配權值的問題了

組合數計算一下(具體看**注釋)

#includeusing namespace std;

const int n = 110, mod = 1e9 + 7;

int f[n][n], g[n][n], tmp[n], n, siz[n], c[n][n];

char s[n];

struct node g[n];

int last[n], gl;

void add(int x, int y) ;

last[x] = gl;

}void pls(int &x, int y)

void dfs(int u)

return ;

}int main()

洛谷P3757 CQOI2017 老C的鍵盤

傳送門 首先可以直接把整個序列建成乙個完全二叉樹的結構,這個應該都看得出來 然後考慮樹形dp,以大於為例 設 f i j 表示 i 這個節點在子樹中排名第 j 位時的總方案數 因為實際只與相對大小有關,與實際數值無關 我們考慮如果從當前子樹中弄出 k 個節點,其他子樹中弄出 j 1 個節點,那麼當前...

洛谷P4170 CQOI2007 塗色

假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...

洛谷 P4170 CQOI2007 塗色

假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...