洛谷 P1287 盒子與球
阿新 • • 發佈:2017-11-25
blank p12 include tdi adg cst span bar 方案
P1287 盒子與球
題目描述
現有r個互不相同的盒子和n個互不相同的球,要將這n個球放入r個盒子中,且不允許有空盒子。問有多少種方法?
例如:有2個不同的盒子(分別編為1號和2號)和3個不同的球(分別編為1、2、3號),則有6種不同的方法:
輸入輸出格式
輸入格式:
兩個整數,n和r,中間用空格分隔。(0≤n, r≤10)
輸出格式:
僅一行,一個整數(保證在長整型範圍內)。表示n個球放入r個盒子的方法。
輸入輸出樣例
輸入樣例#1: 復制3 2
輸出樣例#1: 復制
6
思路:動規。
f[i][j]=f[i-1][j-1]+f[i-1][j]*j;
把第i個球單獨放一個盒子,那方案數為把i-1個球放在j-1個盒子裏的方案數。
把第i個球隨意放,第i個球有j種放置方法,再乘上i-1放在j個盒子裏的方案數。
因為盒子有區分,最後在成一個階乘。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,r; long long jc=1; int f[11][11]={1};int main(){ scanf("%d%d",&n,&r); for(int i=1;i<=n;i++) for(int j=1;j<=r;j++) f[i][j]=f[i-1][j-1]+f[i-1][j]*j; for(int i=2;i<=r;i++) jc*=i; cout<<f[n][r]*jc; }
洛谷 P1287 盒子與球