Lesson Timetable

题目链接https://www.codeforces.com/contest/37/problem/D

数据范围:略。


题解

根本就没想到可以动态规划。

首先从前往后处理,仔细一想是有道理的。

因为如果处理到了$i$,那么前面的所有值都是可以对当前值有贡献的。

即,我们设状态$dp_{i, j}$表示前$i$个教室有$j$个人(第二节课)的方案数。

最后用阶乘即可。

代码

#include <bits/stdc++.h>

#define setIO(s) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) 

#define N 1010 

using namespace std;

typedef long long ll;

const int mod = 1000000007;

char *p1, *p2, buf[100000];

#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )

int rd() {
int x = 0;
char c = nc();
while (c < 48) {
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x;
} int fac[N], inv[N]; int qpow(int x, int y) {
int ans = 1;
while (y) {
if (y & 1) {
ans = (ll)ans * x % mod;
}
y >>= 1;
x = (ll)x * x % mod;
}
return ans;
} void init() {
fac[0] = 1;
inv[0] = 1;
for (int i = 1; i < N; i ++ ) {
fac[i] = (ll)fac[i - 1] * i % mod;
inv[i] = qpow(fac[i], mod - 2);
}
} int dp[1010][1010], bfr[1010], x[1010], y[1010]; int C(int x, int y) {
return (ll)fac[x] * inv[y] % mod * inv[x - y] % mod;
} int main() {
setIO("num");
init();
int m = rd();
for (int i = 1; i <= m; i ++ ) {
x[i] = rd(), bfr[i] = bfr[i - 1] + x[i];
}
for (int i = 1; i <= m; i ++ ) {
y[i] = rd();
}
dp[0][0] = 1;
for (int i = 1; i <= m; i ++ ) {
for (int j = 0; j <= bfr[i]; j ++ ) {
for (int k = 0; k <= min(j, y[i]); k ++ ) {
(dp[i][j] += (ll)dp[i - 1][j - k] * C(bfr[i] - (j - k), k) % mod) %= mod;
}
}
}
// cout << dp[m][bfr[m]] << endl ;
int ans = (ll)dp[m][bfr[m]] * fac[bfr[m]] % mod;
for (int i = 1; i <= m; i ++ ) {
ans = (ll)ans * inv[x[i]];
}
cout << ans << endl ;
return 0;
}

[CF37D]Lesson Timetable_动态规划的更多相关文章

  1. Codeforces 37D Lesson Timetable - 组合数学 - 动态规划

    题目传送门 神奇的门I 神奇的门II 题目大意 有$n$组学生要上课2次课,有$m$个教室,编号为$1$到$m$.要确定有多少种不同的安排上课的教室的方案(每组学生都是本质不同的),使得它们满足: 每 ...

  2. Codeforces 946 D.Timetable-数据处理+动态规划(分组背包) 处理炸裂

    花了两个晚上来搞这道题. 第一个晚上想思路和写代码,第二个晚上调试. 然而还是菜,一直调不对,我的队友是Debug小能手呀(真的是无敌,哈哈,两个人一会就改好了) D. Timetable   tim ...

  3. Lesson 18 He often does this!

    Text After I had had lunch at a village pub, I looked for my bag. I had left it on a chair beside th ...

  4. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  5. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  6. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  7. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  8. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  9. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

随机推荐

  1. @babel/preset-env useBuiltIns 说明

    推荐阅读:https://blog.hhking.cn/2019/04/02/babel-v7-update/ useBuiltIns false 1 "useBuiltIns": ...

  2. ros topic 命令

    #查看topic频率rostopic hz /xxx_imu_driver/imu #查看topic信息rostopic info /xxx_imu_driver/imu #查看topic数据rost ...

  3. Spring Cloud Gateway(七):路由谓词工厂WeightRoutePredicateFactory

    本文基于 spring cloud gateway 2.0.1 接上文 5.基于路由权重(weigth)的谓词工厂 Spring Cloud Gateway 提供了基于路由权重的断言工厂,配置时指定分 ...

  4. python pip 安装插件权限问题及 指定pip国内镜像源

  5. linux几种传输方式与拷贝方式的性能分析

    本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...

  6. 反向代理Nginx

    引用:https://baijiahao.baidu.com/s?id=1600687025749463237&wfr=spider&for=pc 参考下图,正向代理用途:Client ...

  7. ubuntu12.04 64位安装opencv-2.4.9

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dengshuai_super/artic ...

  8. 用http请求thrift服务端出现了内存溢出的情况

    记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出 ...

  9. android DownloadManager: java.lang.IllegalArgumentException: Not a file URI: content://

    DownloadManager 使用Uri指定下载路径Bug 使用DownloadManager 下载文件 通常写法: DownloadManager dm = (DownloadManager) g ...

  10. 简易的CRM系统案例之Struts2&Spring整合+Hibernate3+JSP+MySQL版本

    主要对上一篇Struts2&Spring整合的改造 简易的CRM系统案例之Struts2+Hibernate3+JSP+MySQL版本 src/bean.xml <beans xmlns ...