hdu-4045 Machine scheduling
http://acm.hdu.edu.cn/showproblem.php?pid=4045
/************************************************************************************************************************************
** 题意:给你n台机器,选出r台,每两台之间相差要大于等于k,然后r台可以分成最多m组
** 问有多少种方法。
** 题解:首先从n里挑选r台,r台分成最多m组(Stirling第二类) 乘积即是答案;
** 个人比较弱 orz ACM_clove大牛:http://blog.csdn.net/acm_cxlove/article/details/7857785
** 第一部分:首先每两个机器之前至少有K-1个间隔,那么如果还剩余一些位置,则把这些多余的插入到R个机器中。
** 那么剩余位置便是N-((R-1)*K+1),对于R个机器,R+1个位置,
** 接下来便是把N-((R-1)*K+1)分为R+1个集合(把r+1个空插入剩余的位置),而且可以为空。
** 做法是添加R+1个物品,然后用插板法,这样保证 每一个集合都至少有一个,
** 然后再把每一个集合都减掉一个便是结果,最终结果便是C[n-((r-1)*k+1)+r+1-1][r]。应该比较好理解了。。。。。。
** 第二部分:将R个元素最多分为M个集合,不为空的方案法。
** 对于R个元素分为i个集合结果是第二类斯特林数,然后再统计合计一下就OK了
**************************************************************************************************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
#define mod 1000000007
LL C[2005][2005];
LL stirling[2005][2005];
void init(){C[0][0] = 1;for(int i = 1;i <= 2000;i++){C[i][0] = C[i][i] = 1;for(int j = 1;j < i;j++){C[i][j] = (C[i-1][j-1] + C[i-1][j]) % mod;}}stirling[0][0] = 1;for(int i = 1;i <= 1000;i++){stirling[i][i] = 1;for(int j = 1;j < i;j++)stirling[i][j] = (stirling[i-1][j-1] + j * stirling[i-1][j]) % mod;}
}
int main(){init();LL n,r,k,m;while(cin >> n >> r >> k >> m){if(n - (r-1) * k + 1 < 0) {cout << 0 << endl;continue;}LL sum = 0;for(int i = 1;i <= min(r,m);i++)sum = (sum + stirling[r][i]) % mod;LL ans = C[n - ((r-1) * k + 1) + r + 1 - 1][r] * sum % mod;cout << ans << endl;}return 0;
}
hdu-4045 Machine scheduling相关推荐
- RN-Approximation:Machine Scheduling
Content I. Problem II. 2-Approximation III. 3/2-Approximation Reference I. Problem Finite job set AA ...
- hdu 1150 Machine Schedule (经典二分匹配)
//A组n人 B组m人 //最多有多少人匹配 每人仅仅有匹配一次 # include<stdio.h> # include<string.h> # include<alg ...
- HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...
- python弹出警告框_selenium+webdriver+python 中警告框的处理方法
在自动化测试过程中,经常会遇到弹出警告框的情况,如图所示: 在 WebDriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体做法是使用 ...
- 错排、卡特兰数、斯特林数小结
一. 错排 1.计算公式: 1) D[n] = (n-1)*(D[n-1]+D[n-2]) ,n>=2, D[0] = 1, D[1] = 0 . 解释:对于第n个要加入错排的数,它可以和已经错 ...
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
- 图论复习(各类习题)
可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...
- 遗传算法matlab_史上最强的MATLAB自学网站,你收藏了吗???
各位小伙伴可点击此处,即可进入到优化算法交流地官方账号主页(推荐),谨防上当受骗. hello,大家好!这几天是全国大学生数学建模竞赛的比赛时间,首先预祝各位参赛的同学能够取得好成绩.今天,网上浏览到 ...
- 【智能制造】【APS】数字化智造下APS软件的架构与展望
APS(Advanced Planning and Scheduling) 高级计划与排程均衡供应链与生产过程中各种资源:在不同的供应链与生产瓶颈阶段给出最优的生产计划与排程:实现快速计划排程并对需求 ...
最新文章
- 脑电数据预处理-ICA去除伪影
- 皮一皮:女友是有多么体贴...
- 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史
- 从指定URL中提取文件名
- Alluxio 助力 Kubernetes,加速云端深度学习
- Spring 中的事件处理
- javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局
- 接口的定义与实现(重要)
- 彻底删除 mysql 5.7_Ubuntu16.04彻底删除MySQL5.7
- 【转】python模块分析之collections(六)
- 拓端tecdat|中国消费者共享汽车使用情况调查
- Spring 揭秘之Spring框架的由来
- Spyder单步调试
- 彻底解决pycharm中用matplotlib表格绘制时图表中汉字设置
- BroadcastReceiver生命周期探讨
- 华为服务器新版bios修改IPMI,华为服务器ipmi设置
- 快手在线查询权重网站源码+接口
- matlab 雷电,利用MATLAB实现对雷电监测数据的分析和绘图
- java玫瑰花代码_玫瑰花(示例代码)
- Python实现一个键盘记录器功能