HDU 多校聯合第六場

2022-05-05 21:42:14 字數 1392 閱讀 4701

uestc的題。。。果然,題意都弄得這麼晦澀。

推個規律,mod r。偶推錯了。。。1個小時才過。

三分做的。還是不知道怎麼證明他是凹函式,話說。。以為神人想當然的說這是凹函式。。。怎麼證明?管他呢,真沒勁!

話說偶已經推出來s1的和sum1,s2的和sum2。sum1 - sum2必為偶數,才能yes。。。但是對於字串長度為2時這個規律無效。。。。所以。。。偶沒敢寫

這題太神了。。。懷疑是tc上的題改的。。

樹形dp。兩種方法

乙個共有的性質。左孩子中的最大值小於右孩子中的最大值。(因為序列為 2^0, 2^1, 2^2...,2^n)

方法1:

f[n][d]表示n個節點深度為 1--- d時所有情況的和。

ans = f[n][d] - f[n][d-1];

case1:任選乙個為根節點,然後這個根節點只有左(右)孩子。f[n][d] = 2*n*f[n-1][d-1];

case2:列舉左孩子中節點的個數[1, n - 2],因為任選乙個為根,最大的那個一定在右孩子裡。這樣消耗掉兩個,所以是n - 2; f[n]dj] +=  n*c(n-2, i)*f[i][d-1]*f[n-i-1][d-1];

這樣狀態就寫完了,注意n == 1的時候f[1][x] = 1;

記憶化搜尋實現比較方便

方法2:

dp[n][d]表示n個節點深度為d的情況數。sum[n][d] 表示n個節點深度為 1--- d時所有情況的和。

ans = dp[n][d];

case1:任選乙個為根節點,然後這個根節點只有左(右)孩子。dp[n][d] = 2*n*dp[n-1][d-1];

case2:列舉左孩子中節點的個數[1, n - 2],有兩種情況,a).左孩子深度為d - 1,b)右孩子深度為d - 1.

這兩個的和為 dp[i][d-1]*sum[n-i-1][d-1] + dp[n-i-1][d-1]*sum[i][d-1] ;因為重複計算了左右孩子深度都為d-1的情況,所以要再減掉乙個dp[i][d-1]*d[n-i-1][d-1];

dp[n][d] += n*c(n-2, i)* (dp[i][d-1]*sum[n-i-1][d-1] + dp[n-i-1][d-1]*sum[i][d-1]  - dp[i][d-1]*d[n-i-1][d-1])

sum[n][d] = sum[n][d-1] + dp[n][d]; (sum初始化時,sum[1][x] = 1。)

if(d > n)  sum[n][d] = sum[n][d-1];

遞推實現

------------------------分割線 -----------------------------------

ps:其實這兩種方法本質是一樣的。。。是我吃飽了撐的給它分開。。。。

ps2:注意mod。

2013多校第六場

hdu 4655 題意 給乙個序列,每個位置可以塗1 ai種顏色,連續不相同的顏色為一段,對於乙個排列,所有的塗色方法產生的段數為s,求最大的s 分析 對於乙個排序,所有的段數為n 相鄰兩個位置塗相同顏色的個數s 怎麼計算相鄰兩個位置塗相同顏色的個數s?p i 表示字首積,即p i a1 a2 ai...

杭電多校第六場(IF)

題意 有命題 將 b 進製數y按位相加,迴圈無窮次,最終結果若 x 0,則有y x 0,反之不然 給出b和x,判斷命題是否成立 打表發現的b x 1時成立,看到有數論大佬推出來的 想看推導的右轉 includeusing namespace std typedef unsigned long lon...

牛客多校第六場

d 題意感覺說的不是很清楚,一開始題意弄錯了,以為是最優的方案,結果是對於每個盒子這個 so clever 的人的做法是優先選擇盡可能大的物品裝完乙個盒子,我就不知道這個人 聰明了。思路 賽後知道題意後,5分鐘寫完,瞎暴力就一發過了,我自己都有點出乎意料真水了。includeusing namesp...