【noi 2.6_9284】盒子与小球之二(DP)
生活随笔
收集整理的這篇文章主要介紹了
【noi 2.6_9284】盒子与小球之二(DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:有N個有差別的盒子和分別為A個和B個的紅球和藍球,盒子內可空,問方案數。
解法:我自己打的直接用了求組合C的公式,把紅球和藍球分開看。對于紅球,在N個盒子可放任意個數,便相當于除了A個紅球還有N個“空”球可放進N個盒子里,這些球之間是無差別的,從這N+A個球中選N個,就是C(N,N+A)。對于藍球同理。再用乘法原理,相乘為答案。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 typedef long long LL; 7 8 LL C(LL x,LL y) 9 { 10 if (x>y/2) x=y-x; 11 LL s=1; 12 for (int i=x;i>=1;i--) 13 s*=(y-i+1); 14 for (int i=x;i>=1;i--) 15 s/=i; 16 return s; 17 } 18 int main() 19 { 20 LL n,x,y; 21 scanf("%lld%lld%lld",&n,&x,&y); 22 printf("%lld\n",C(n,n+x)*C(n,n+y)); 23 return 0; 24 } View Code另外:若要用DP則是:f[i][j]表示在i個盒子中一共放j個互相無差別球的方案數。
f[i][j]=f[i-1][j](空盒子)+f[i][j-1](往這第i個盒子里加1個球);再由于不需放完所有的球,方案數是f[N][0~A]和f[N][0~B]的乘積。
轉載于:https://www.cnblogs.com/konjak/p/5969682.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【noi 2.6_9284】盒子与小球之二(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016.2.17文件夹选择框及文件选择
- 下一篇: iOS五种本地缓存数据方式