1. 程式人生 > 其它 >NOIO 題目選做

NOIO 題目選做

一些有趣題

感覺 NOIO 裡的厲害題還挺多的,如果退役失敗的話還是要做一下

P6189

你跟我說這是入門組????那我算什麼

一眼的 70pts 的 nt dp。

\(dp_{i,j}\) 前 i 個數 和為 j 的方案數。本質是個完全揹包

採取根號分治的思想

\(g_{i,j}\) 表示用了 i 個大於等於 T 的數和為 j 的方案數,那麼 \(g_{i,j} = g_{i-1,j-m}+g_{i,j-i}\)

前者表示拆分序列中增加一個 m,後者表示把當前拆分序列每個數都加上 1。可以發現對於任意一個子序列是可以任意組合的。所以我們最後只需要乘法原理統計答案即可。

\(\rm link\)

P6187

觀察可以發現一個環可以被拆成若干部分,而每一部分相對獨立。樣例解釋有提示了我們只需要將數字分配的儘量不平均即可。然後只需要把所有權值排個序從大到小開始貪心即可。

\(\rm link\)

P6570

隨便分析一下發現一個子序列最多隻有 17 個數,我們可以直接考慮一個複雜度是 \(O(3^n)\) 狀壓 dp。然後還真的能過,有更厲害的 \(O(n2^n)\) 的集合冪級數做法可惜我不會。

\(\rm link\)

P7473

這個題我考場上做過,但是沒做出來。

考慮分析一下兩個球只會在某個障礙物旁邊停下來,考慮到最多隻有 250 個障礙物,我們可以抽象出一個 dp 來 \(\rm dp[x,5,y,5]\)

表示第一個球在 \(x\) 號障礙物的某個方向,另一個球在 \(y\) 號障礙物的某個方向。

共計會有 \(O(n^2)\) 個狀態,哦大概就是列舉終點然後做一個多源 bfs 即可非常厲害

我口胡的沒有程式碼。