测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A27379. 配备书的方案

填空题 较易

题目描述

配备书的方案

题目描述

中科智慧科技馆里面,科技课程导师要为同学们准备一些科普图书,方便大家阅读。假设一共要选出n本书放在书架上,并且书的种类有m种,包括天文的、计算机的、物理的、化学的、生物的等等。老师会按照每个种类顺序固定的方式摆放好,以方便大家借阅。假设给出每类书现有的数量,请求解出一共有多少种选书方案,也就是总共挑选出n本书(从每种图书中挑选不同的本数),一种有多少种摆放方案?

输入格式

第一行包含两个正整数,分别是m种书,和要摆放在书架上的n本书。

第二行,由空格隔开的每个种类书的数量。

输出格式

输出一行一个整数,表示有多少种图书的摆放方案。

注意:摆放方案数量可能很多,请输出方案数对202307取模的结果。

样例输入

2 4
3 2

样例输出

2

参考答案

#include <iostream> #include <vector> using namespace std; const int MOD = 202307; int main() { int m, n; cin >> m >> n; vector<int> books(m); for (int i = 0; i < m; ++i) { cin >> books[i]; } vector<int> dp(n + 1, 0); dp[0] = 1; // 没有书的时候有一种方案:不选任何书 for (int i = 0; i < m; ++i) { for (int j = n; j >= 1; --j) { // 从大到小遍历,保证状态不会重叠 for (int k = 1; k <= min(j, books[i]); ++k) { dp[j] = (dp[j] + dp[j - k]) % MOD; } } } cout << dp[n] << endl; return 0; }
上一题 下一题