codeforces 256 D Liars and Serge

來源:互聯網
上載者:User

戳這裡看題目

題意看了很久才懂,題解又搞了許久才懂,敲的時候連組合數C[i][j]都敲錯了.......

這或許就是被考試折磨的下場,下學期盡量在前半學期不要落下太多的功課吧。

這道題關鍵是真真假假,假假真真 - -

題意是說有n個人,有些人說真話,有些人說假話,每個人都知道所有人是說假話的還是說真話的,現在問他們每一個人:說真話的人有多少。每個人都會給出一個答案ai,

說假話的人會隨便給出一個數,但不會給出真實的答案,現在,給你兩個數  n  k ,問你有多少種n個數的方案,能確定恰好有k個人說謊。


注意到關鍵的一點:如果說k的人沒有k個,那麼說k的人都在撒謊 。

然後我們開始構造,先假設有n個空位,我們依次將回答1 2 3 。。n的人放入這些空位,設f[i][j][k]表示說1~i的人 有 j 個 都已經放入了空位,且已經確定了有k個人說謊,

那麼接下來我們要放說i+1的人,還剩n - j個空位,自然要枚舉說i+1的人的個數L,如果L == i+1,那麼我們將不能確定到底這些人有沒有在說謊,其他情況都是在說謊

所以 轉移如下:

if(L == i+1) f[i+1][j+L][k] = (f[i+1][j+L][k]   + f[i][j][k]*c[n-j][L]%mod) % mod;
else        f[i+1][j+l][k+L] = (f[i+1][j+L][k+L] + f[i][j][k]*c[n-j][L]%mod) % mod;

複雜度是四次方的,過不了,但是n都是2的指數次冪,所以就打表吧。

代碼 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.