gym102893 D. Multiple Subject Lessons

题目链接:D. Multiple Subject Lessons

题意
给定 nk,表示 n 个学生,每个学生有 k 种颜色的笔,每个学生需要在纸上写下若干个数字,使得数字和为 n。问共有多少不同种方案。

SOLUTION
dp[i][j] 表示用前 i 个数字,和为 j 的方案数,转移时枚举新数字 i 的个数,若有 t,则该部分方案为
(t+k1t)

CODE
#include <bits/stdc++.h>
using namespace std;
using LL = long long;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int n, k; cin >> n >> k;
	
	vector f(n + 1, vector<LL>(n + 1));
	
	auto C = [&] (int a, int b) {
		LL ans = 1;
		for(int i = b + 1; i <= a; i ++ ) ans *= i;
		for(int j = 1; j <= (a - b); j ++ ) ans /= j;
		return ans;
	};
	
	f[0][0] = 1;
	for(int i = 1; i <= n; i ++ ) {
		for(int j = 0; j <= n; j ++ ) {
			for(int t = 0; t <= j / i; t ++ ) {
				assert(i <= n && j <= n);
				f[i][j] += f[i - 1][j - t * i] * C(t + k - 1, t);
			}
		}
	}
	
	cout << f[n][n] << "\n";
	
	
  return 0;
}

posted @   ccz9729  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩