小W的數字

2021-07-14 05:46:26 字數 802 閱讀 3485

如果設step(n)表示n減到0的最小操作次數,顯然step有單調性。

我們設f[mx,n]表示把n減到0的最小操作次數,mx表示的是比n最高位還高的那些位的最大值。

現在我們可以固定最高位,把剩餘位減到0,也就是遞迴計算,返回二元組(cost,dp)表示操作次數為cost,最終還可以額外減掉乙個dp。

例如21,做下去會返回(1,1),也就是變成20後還能額外減掉乙個1變為19。

做到最末位時,直接減掉最大值。

然後記憶化搜尋即可,具體見**實現。

注意爆long long的問題。

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

#define cost first

#define dp second

using

namespace

std;

typedef

long

long ll;

typedef pairdong;

map f;

ll n;

dong dfs(ll mx,ll n)

int main()

4665 小w的喜糖

求數字可重的錯排。考慮2 n2 n 2n容斥,列舉哪些位一樣,就是 t s 1 t n t ai bi sum 1 frac t s 1 t ai bi n t 其中b ib i bi 為每種顏色已用個數。考慮dp這個式子,f i j f i j f i j 表示前i種顏色,用了j個,式子下面逆元積...

小w的a b問題

大家一定都做過各大oj上面不同版本的a b problem,如果現在反過來給你c,請你給我輸出一組a和b,使得a b的和等於c呢?這同樣還是乙個簡單的問題。我們假設某種語言中的32位整形被定義成int 型別,該語言中負整數以二進位制補碼的形式儲存,第32位為符號位,前31位為數值位。例如 1就被儲存...

小w的魔術撲克

這道題的關鍵,就是將題目轉化為圖論。我們將每張牌的正反兩面的數值連一條邊,可以發現,我們只能在一棵樹中選n 1個點。那麼就意味著,當乙個詢問包含一整棵樹時,這是不可能的 因為是用數值做編號,可以發現乙個點只可能出現在一棵樹中 那麼如何實現呢?我們處理出每棵樹的min和max,自然,樹的其他所有節點都...