日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVALive 7143 Room Assignment(组合数学+DP)(2014 Asia Shanghai Regional Contest)

發布時間:2024/4/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVALive 7143 Room Assignment(组合数学+DP)(2014 Asia Shanghai Regional Contest) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=648&page=show_problem&problem=5155

There are N guests checking in at the front desk of the hotel. 2K (0 ≤ 2K ≤ N) of them are twins.
There are M rooms available. Each room has capacity ci which means how many guests it can hold.
It happens that the total room capacity is N, i.e. c1 + c2 + . . . + cM = N.
The hotel receptionist wonders how many different room assignments to accommodate all guests.
Since the, receptionist cannot tell the two twins in any pair of twins apart, two room assignments are
considered the same if one can be generated from the other by swapping the two twins in each of some
number of pairs. For rooms with capacity greater than 1, it only matters which people are in the room;
they are not considered to be in any particular order within the room.
Input
The first line of the input gives the number of test cases, T. T test cases follow. Each test case starts
with three integers N, M, and K, which indicates the number of guests, the number of rooms, and the
number of pairs of twins. The following line contains M integers, c1, c2, …, cM, which indicates the i-th
room’s capacity.
Output
For each test case, first output one line containing ‘Case #x: y’, where x is the test case number
(starting from 1) and y is the number of different room assignments modulo 1,000,000,007 (109 + 7).

?

題目大意:有n個顏色的球,其中有k對球顏色相同,別的都是完全不同的。給m個盒子,每個盒子的容量為c[i],有sum{c[i]}=n。問:有多少種姿勢可以把n個球全部放入盒子中。

思路:首先這是一條組合計數的動態規劃。

用dp[i][r]表示,前i個盒子已經放完了,手上還拿著r對同色球。

設對于狀態dp[i][r],在第 i+1 個盒子中,我們要從 r 對同色球中取出 a 對,拿其中一個放入盒子 i+1 ;從剩下的 r-a 對同色球中,拿出 b 對,全部放入盒子 i+1 中;再從其他剩下的未放入盒子的球里面(假設有 sum 個),取 c[i]-a-2*b 個放入睇 i+1 個盒子中。這樣便轉移到了狀態dp[i+1][r-a-b]。

狀態轉移方程為:dp[i+1][r-a-b] = dp[i][r] * comb(r, a) * comb(r - a, b) * comb(sum - 2 * r, c[i] - a - 2 * b).

其中comb(p, q)表示從 p 個物體中選出 q 個的組合數。

至于在同色球中只選出其中一個球的問題,可以考慮:給兩個球強行編號為1、2,然后強行要求1必需放在2的前面,這樣就不會產生重復。當我們放入球1之后,球2就與其他普通的球無異了,無需任何處理。

然后預處理一下階乘及其逆元,利用公式comb(p, q) = p! / q! / (p-q)!,在O(1)時間內求出組合數。

總的時間復雜度為O(mk^3)。

?

代碼(1.252S):

1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #include <cstring> 5 using namespace std; 6 typedef long long LL; 7 8 const int MAXN = 100010; 9 const int MOD = 1e9 + 7; 10 11 int inv[MAXN], fact[MAXN]; 12 13 int _inv(int x) { 14 if(x == 1) return 1; 15 return LL(MOD - MOD / x) * _inv(MOD % x) % MOD; 16 } 17 18 void init(int n = 100000) { 19 fact[0] = 1; 20 for(int i = 1; i <= n; ++i) 21 fact[i] = fact[i - 1] * LL(i) % MOD; 22 for(int i = 0; i <= n; ++i) 23 inv[i] = _inv(fact[i]); 24 } 25 26 LL comb(int a, int b) { 27 if(a < b) return 0; 28 return LL(fact[a]) * inv[b] % MOD * LL(inv[a - b]) % MOD; 29 } 30 31 int dp[13][111]; 32 int c[13]; 33 int T, n, m, k; 34 35 int mulmul(LL a, LL b, LL c, LL d) { 36 return a * b % MOD * c % MOD * d % MOD; 37 } 38 39 void update_add(int &a, int b) { 40 a += b; 41 if(a >= MOD) a -= MOD; 42 } 43 44 int solve() { 45 memset(dp, 0, sizeof(dp)); 46 dp[0][k] = 1; 47 for(int i = 0, sum = n; i < m; ++i) { 48 for(int r = 0; r <= k; ++r) if(dp[i][r]) { 49 if(sum < 2 * r) break; 50 for(int a = 0; a <= r; ++a) { 51 for(int b = 0; b + a <= r; ++b) { 52 if(c[i + 1] - a - 2 * b < 0) break; 53 int t = mulmul(dp[i][r], comb(r, a), comb(r - a, b), comb(sum - 2 * r, c[i + 1] - a - 2 * b)); 54 update_add(dp[i + 1][r - a - b], t); 55 } 56 if(i == m - 1) break; /// if i = m - 1 then a must be zero 57 } 58 } 59 sum -= c[i + 1]; 60 } 61 return dp[m][0]; 62 } 63 64 int main() { 65 init(); 66 //printf("%d\n", comb(10, 1)); 67 scanf("%d", &T); 68 for(int t = 1; t <= T; ++t) { 69 scanf("%d%d%d", &n, &m, &k); 70 for(int i = 1; i <= m; ++i) scanf("%d", &c[i]); 71 printf("Case #%d: %d\n", t, solve()); 72 } 73 } View Code

?

轉載于:https://www.cnblogs.com/oyking/p/4508260.html

總結

以上是生活随笔為你收集整理的UVALive 7143 Room Assignment(组合数学+DP)(2014 Asia Shanghai Regional Contest)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品一区欧美 | 日韩欧美三级在线 | 精品国产第一页 | 久青草免费视频 | 69av视频| 国产极品一区 | 97视频免费| 久久精品国产露脸对白 | 国产美女福利在线 | 另一种灿烂生活 | 黄色小毛片 | 国产亚洲精品久久久久久打不开 | 日韩三级不卡 | 泰国午夜理伦三级 | 欧美wwwwww | 国产女人被狂躁到高潮小说 | 亚洲熟妇无码一区二区三区导航 | 国产乱欲视频 | 亚洲人在线 | 在线观看色 | 亚洲射| 91精品福利 | 欧美a大片| 美脚の诱脚舐め脚视频播放 | 国产性猛交普通话对白 | 区一区二在线观看 | www成人啪啪18软件 | 欧美成人午夜精品免费 | 午夜视频在线观看网站 | 亚洲成色| 成人av电影在线观看 | www.天天综合| 亚洲孕交 | 久久青青 | 青青青青青操 | 日本女人hd | 中文有码在线播放 | 国产精品资源站 | 久久精品3 | 无码国产精品一区二区色情男同 | 美女网站视频在线观看 | 日本强好片久久久久久aaa | av免费看在线 | 8mav在线 | 国产明星换脸xxxx色视频 | 韩国久久久久 | 91精品国产乱码久久久久久久久 | 69视频在线观看免费 | 干爹你真棒插曲mv在线观看 | 波多野结衣办公室33分钟 | 中文字幕免费高清视频 | 欧美激情在线免费观看 | 99色 | 韩国黄色一级片 | av中文资源网 | 操你啦在线视频 | 亚洲国产一区在线观看 | 国产成人无码一区二区在线播放 | 手机在线播放av | 精品动漫一区二区三区在线观看 | 亚洲福利久久 | 色乱码一区二区三在线看 | 国产露脸国语对白在线 | 成人91看片 | 国产精品88久久久久久妇女 | 亚洲影视一区二区三区 | 色噜噜狠狠一区二区 | 在线观看 亚洲 | 一级裸体片| 亚洲国产精品av | 日韩精品一级 | 伊人97 | 女人高潮娇喘声mp3 乱色视频 | 九一国产视频 | 久久久久久黄色片 | 狠狠干2023 | 疯狂撞击丝袜人妻 | 国产伦精品一区二区三区在线 | 久久久久国产精品一区 | 日韩精品无码一区二区三区久久久 | 精品一区二区三区国产 | 天天色宗合 | 91精品国产麻豆国产自产在线 | 国产明星换脸xxxx色视频 | 在线观看免费视频一区二区 | 日本一区二区视频在线观看 | 精品毛片在线观看 | 黄金网站在线观看 | 亚洲第一av网 | 极品videosvideo喷水 | 痴女扩张宫交脱垂重口小说 | 国模福利视频 | 欧美日韩你懂的 | 日本黄色高清 | 欧美做受高潮6 | 国产一区二区激情视频 | 日韩高清国产一区在线 | 中日韩精品在线 | 欧美乱妇视频 |