UVA - 10910 Marks Distribution

题目大意:首先,如果总的分数不够的话,肯定输出0。之后我们就可以把问题转化成这样了,假设多出来的分数为p,那么把p个相同的小球放到N个盒子里,每个盒子可以为空,一共有多少种方法?


解题思路:    解决上面说的这种放小球的问题可以用“隔板法”,N-1隔板隔开的小球的情况就是相应每个盒子里小球的状况,由于盒子可以为空,就相当于p+N-1和空位选出N-1个位置放隔板的方法数,那么结果就是C(p+N-1,N-1),转换成原题的数据,就是C(T-P*N+N-1,N-1)。


#include <cstdio>

int main() {
	int C[150][150] = {1};

	for (int i = 1; i < 150; i++) {
		C[i][0] = 1;
		for (int j = 1; j <= i; j++)
			C[i][j] = C[i-1][j] + C[i-1][j-1];
	}

	int K, N, T, P;
	scanf("%d", &K);
	while (K--) {
		scanf("%d%d%d", &N, &T, &P);
		printf("%d\n", C[T-N*P+N-1][N-1]);
	}
	return 0;
}


你可能感兴趣的:(UVA - 10910 Marks Distribution)