老師居然考這麼毒瘤的題目!!!!!
很容易想到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...