BZOJ 4710 [Jsoi2011]分特產 解題報告

4710 [Jsoi2011]分特產

題意

給定\(n\)個集合,每個集合有相同的\(a_i\)個元素,不同的集合的元素不同。將所有的元素分給\(m\)個不同位置,要求每個位置至少有一個元素,求分配方案數。


先考慮兩個簡單的問題

給定\(m\)個相同元素和\(n\)個不同位置,每個位置至少分一個的方案數?

使用插板法,等價于在\(m-1\)個空擋里插\(n-1\)個元素,方案數為

\[\binom{m-1}{n-1}\]

但是這樣考慮,這個題目是做不了的。

給定\(m\)個相同元素和\(n\)個不同位置,每個位置可以不分的方案數?

事實上還是插板,但可以一個位置插兩個板子。

\(m\)個元素看做\(1\),把\(n-1\)個插開點看做\(0\),等價于從\(m+n-1\)個元素拿\(n-1\)個,方案數為

\[\binom{m+n-1}{n-1}\]


從問題\(2\)出發,我們就可以容斥了

把一種方案有幾個位置沒選作為方案的性質,我們可以計算出一個至少有幾個人沒選的方案集合的數量。

因為位置的計算方法是等價的,所以我們不需要枚舉子集,只需要簡單的按照組合數進行計算就可以了。

具體的說,我們把所有集合的元素都獨立按方案二的選出來,令\(f_i\)代表至少\(i\)個位置不選擇元素的方案數,則有

\[f_i=\binom{n}{i}\prod\limits_{j=1}^n \binom{a_j+n-i-1}{n-i-1}\]

則總方案是 至少\(0\)人-至少\(1\)人+...,即

\[\sum_{i=0}^{n-1}(-1)^if_i\]


Code:

#include <cstdio>
#define ll long long
const int N=2000;
const ll mod=1e9+7;
ll C[N+10][N+10];
void init()
{C[0][0]=1;for(int i=1;i<=N;i++){C[i][0]=1;for(int j=1;j<=i;j++)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;}
}
int n,m,a[N];ll ans;
int main()
{init();scanf("%d%d",&n,&m);for(int i=1;i<=m;i++) scanf("%d",a+i);for(int i=0;i<n;i++){ll mu=1;for(int j=1;j<=m;j++)(mu*=C[a[j]+n-i-1][n-i-1])%=mod;(ans+=(i&1?-1ll:1ll)*C[n][i]*mu%mod)%=mod;}printf("%lld\n",(ans%mod+mod)%mod);return 0;
}

2018.10.18

轉載于:https://www.cnblogs.com/butterflydew/p/9808360.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450983.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java接口調試思想

對于接口調試的理解&#xff1a;最近多次參與接口調試工作&#xff0c;一般情況都是獲取對方接口文檔&#xff0c;文檔中有加密驗證方式&#xff0c;根據加密驗證方式開發&#xff0c;調用對應的接口。可以不可以簡化這個流程那&#xff0c;至少減少一方的工作量。1、減少調用方…

SOA (面向服務的架構)

見&#xff1a;https://baike.baidu.com/item/SOA/2140650?fraladdin UDDI 解說參見&#xff1a;UDDI是什么 SOAP解說參見&#xff1a; SOAP:簡單對象訪問協議 面向服務的架構&#xff08;SOA&#xff09;是一個組件模型&#xff0c;它將應用程序的不同功能單元&#xff08;稱…

mysql中count(*)和count(1)和count(column)區別

在日常的mysql使用中&#xff0c;我們經常會看到SELECT COUNT(*)、SELECT COUNT(1)等查詢語句&#xff0c;他們到底有什么區別呢&#xff1f;今天我就來總結下。 我們先從函數的含義說起&#xff1a; count() 統計滿足查詢條件的結果集的總行數(包含null)&#xff0c;其中count…

第一天筆記

編程語言分類&#xff1a; 1. 機器語言&#xff1a;用二進制指令編程&#xff0c;本質是直接操作硬件。 優點&#xff1a;執行效率高 缺點&#xff1a;開發效率低&#xff0c;學習難度高 2.匯編語言&#xff1a;用英文標簽代替二進制指令&#xff0c;本質也是直接操作硬件。…

索尼MOTO等壓榨國內代工廠:員工宿舍像監獄

摘要&#xff1a;據調查報告披露&#xff0c;偉易達血汗工廠的壓榨情況比起富士康、蘋果等有過之而無不及&#xff0c;包括強迫工人超負荷工作、暴露于有害化學物質、住宿環境差、虐待員工、超低的工資等。如前面保羅克魯格曼發表了《表揚廉價勞動》一文&#xff0c;N.D.克里斯…

[cerc2012][Gym100624B]20181013

轉載于:https://www.cnblogs.com/KonjakJuruo/p/9809637.html

Nginx服務器證書部署-亞洲誠信

Nginx服務器證書部署發布時間&#xff1a;2018-01-17 16:15:25依賴建議l SSL卸載驅動。建議&#xff1a;openssl版本1.1.0f。l nginx版本Stable version&#xff1a;最新穩定版&#xff0c;生產環境上建議使用的版本。獲取證書MPKI方式&#xff1a;1. 登錄https://mpki.tru…

java transient關鍵字

transient是用在序列化中的。當我們序列化的過程中&#xff0c;如果我們不想序列化某個字段&#xff0c;那么我們就可以使用這個關鍵字&#xff0c;jvm就會在序列化的時候自動忽略這個字段的數值。 transient主要有兩個用途&#xff1a; 1.保證數據的安全。在進行序列化時&…

UDDI

見&#xff1a;https://baike.baidu.com/item/UDDI/2901586?fraladdin UDDI 是一種目錄服務&#xff0c;企業可以使用它對 Web services 進行注冊和搜索。UDDI&#xff0c;英文為 "Universal Description, Discovery and Integration"&#xff0c;可譯為“通用描述、…

騰訊手機管家籌劃“出海”

摘要&#xff1a;正籌劃推進旗下手機安全產品出海攬客。6月22日&#xff0c;騰訊無線安全產品部副總經理胡振東在上海表示&#xff0c;騰訊手機管家已推出了安卓國際版&#xff0c;下決心進軍國際市場。 騰訊(00700.HK)正籌劃推進旗下手機安全產品出海攬客。6月22日&#xff0c…

用反卷積(Deconvnet)可視化理解卷積神經網絡還有使用tensorboard

『cs231n』卷積神經網絡的可視化與進一步理解 深度學習小白——卷積神經網絡可視化&#xff08;二&#xff09; TensorBoard--TensorFlow可視化 原文地址&#xff1a;http://blog.csdn.net/hjimce/article/details/50544370 作者&#xff1a;hjimce 一、相關理論 本篇博文主要講…

java線程實現及線程池的使用

Java線程實現 線程把處理器的調度和資源分配分開&#xff0c;是cpu的最小調度單位。多個線程可以共享進程的內存資源&#xff0c;又可以獨立調度。java線程關鍵方法都是通過高效的本地方法實現的。Java線程的主要實現方式有三種&#xff1a;內核實現、用戶實現、內核用戶混合實…

SOAP:簡單對象訪問協議

見&#xff1a;https://baike.baidu.com/item/%E7%AE%80%E5%8D%95%E5%AF%B9%E8%B1%A1%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE/3841505?fraladdin&fromid4684413&fromtitleSOAP 簡單對象訪問協議 SOAP&#xff08;簡單對象訪問協議&#xff09;一般指簡單對象訪問協議 …

程序調試

對拍 $ Windows $ 下的對拍程序 借助 \(Windows\) 腳本echo off :loop r.exe > input.in coronas.exe <input.in > output.a std.exe <input.in > output.b fc output.a output.b if not errorlevel 1 goto loop 一直沒有找到怎樣能控制對拍次數,今天終于醒悟,可…

不怕燒錢怕翻車:雷軍與馬化騰現場“過招”

說起微信&#xff0c;很多時尚潮人都很熟悉。這款軟件可以發送語音信息、可以在有無線網絡的地方免費發送、甚至只需搖一搖就能找到在你附近的用戶&#xff0c;這些方便、時尚、新穎的元素使微信受到了很多用戶的喜愛&#xff0c;也奪得了大量的市場。其實&#xff0c;在微信發…

php基礎(一)

1、header(contentType:text/html,charset:utf-8)設置編碼 2、查找字符串最后一次出現的 strrpos() 查找字符第一次出現的 strpos 3、array_sum() 返回數組值得和 4、func_num_args() 求函數參數的個數 5、func_get_args() 獲取函數的所有參數 6、匿名函數 例子 $anonymityfun…

Thread.yield()和Thread.sleep(0)

關于Thread.yield()和Thread.sleep(0)的語義問題真是一個讓人撓頭的問題&#xff0c;翻了好多資料&#xff0c;在java6語言規范中看到了一段這樣的描述&#xff1a; 重點在紅框中&#xff0c;簡而言之就是&#xff1a;sleep(0)和yield()的實現不需要任何可見的效果。那么在實現…

OOA:面向對象

見&#xff1a;https://baike.baidu.com/item/OOA/3659916?fraladdin OOA:面向對象&#xff1a; Object-Oriented Analysis&#xff08;面向對象分析方法&#xff09;是確定需求或者業務的角度&#xff0c;按照面向對象的思想來分析業務。例如&#xff1a;OOA只是對需求中描述…

DCT原型 ——傅里葉級數

傅里葉級數 法國數學家傅里葉發現&#xff0c;任何周期函數都可以用正弦函數和余弦函數構成的無窮級數來表示&#xff08;選擇正弦函數與余弦函數作為基函數是因為它們是正交的&#xff09;&#xff0c;后世稱為傅里葉級數&#xff08;法語&#xff1a;srie de Fourier&#xf…

c 遞歸算法

#include <stdio.h>double factorial(unsigned int i) {if(i < 1){return 1;}return i * factorial(i - 1); } int main() {int i 15;printf("%d 的階乘為 %f\n", i, factorial(i));return 0; } 轉載于:https://www.cnblogs.com/sea-stream/p/9822437.htm…