BZOJ 3057聖主的考驗題解

2022-05-20 12:04:39 字數 986 閱讀 7107

老師居然考這麼毒瘤的題目!!!!!

很容易想到dp,f[i][j]表示有i個節點,左子樹的最深深度為j的方案數

列舉左子樹有多少節點然後轉移,複雜度為n^3

t飛~我們考慮到有深度為h的樹的節點有多少,可以發現深度為h的節點有著一定的範圍

設minn為深度為h的樹最少有多少節點,maxh為深度為h的數最多有多少節點

很顯然minn[h]=minn[h-1]+minn[h-2]+1,maxh[h]=2^h-1

我們每一次轉移時依然列舉左子樹節點個數i,再次列舉深度是只需要列舉所有minn[h]<=i,切maxh[h]>=h的深度h

這樣複雜度就變成了n^2*h,h為maxh[h]>3000的第乙個h大約為20

但是它神奇的t掉了,我也不知道為什麼......

# include# include

# include

# include

using

namespace

std;

typedef

long

long

ll;const

int mn = 3000

;const

int mod = 1000000000

;int maxh[31],minh[31],l[mn + 10],r[mn + 10

];ll dp[mn + 10][31],ans[mn + 10];

intmain ()

}for(int h=1;h<=min(29,i);h++)

ans[i]+=dp[i][h];

ans[i] %=mod;

}intn;

while(scanf("

%d",&n),n)

printf(n>=38 ? "

%09lld\n

" : "

%lld\n

",ans[n]);

return0;

}

題解 Luogu P4240 毒瘤之神的考驗

p4240 毒瘤之神的考驗 引理 varphi ij dfrac 證明 begin varphi i varphi j gcd i,j i prod p 1 mid i dfrac cdot j prod p 2 mid j dfrac cdot gcd i,j ij gcd i,j left pr...

BZOJ3083 遙遠的國度 題解

題面 傳送門 鏈上修改,子樹查詢,一看就是樹鏈剖分,鏈修改不需要說了吧,查詢 x x 的子樹只需要查詢 p osx,posx siz ex 1 role presentation style position relative po sx,p osx size x 1 pos x,po sx s i...

題解 BZOJ 2054 瘋狂的饅頭

2054.瘋狂的饅頭 給序列的區間染色 一開始都是 0 問最後序列是什麼顏色的。並查集。倒序染色這樣就不用去考慮已經染過色的了染過色的用並查集維護。坑點 題目中給你的左端點不一定小於等於右端點。include include include include include define maxn 1...