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相关推荐

  1. RN-Approximation:Machine Scheduling

    Content I. Problem II. 2-Approximation III. 3/2-Approximation Reference I. Problem Finite job set AA ...

  2. hdu 1150 Machine Schedule (经典二分匹配)

    //A组n人 B组m人 //最多有多少人匹配 每人仅仅有匹配一次 # include<stdio.h> # include<string.h> # include<alg ...

  3. HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...

  4. python弹出警告框_selenium+webdriver+python 中警告框的处理方法

    在自动化测试过程中,经常会遇到弹出警告框的情况,如图所示: 在 WebDriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体做法是使用 ...

  5. 错排、卡特兰数、斯特林数小结

    一. 错排 1.计算公式: 1) D[n] = (n-1)*(D[n-1]+D[n-2]) ,n>=2, D[0] = 1, D[1] = 0 . 解释:对于第n个要加入错排的数,它可以和已经错 ...

  6. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  7. 图论复习(各类习题)

    可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...

  8. 遗传算法matlab_史上最强的MATLAB自学网站,你收藏了吗???

    各位小伙伴可点击此处,即可进入到优化算法交流地官方账号主页(推荐),谨防上当受骗. hello,大家好!这几天是全国大学生数学建模竞赛的比赛时间,首先预祝各位参赛的同学能够取得好成绩.今天,网上浏览到 ...

  9. 【智能制造】【APS】数字化智造下APS软件的架构与展望

    APS(Advanced Planning and Scheduling) 高级计划与排程均衡供应链与生产过程中各种资源:在不同的供应链与生产瓶颈阶段给出最优的生产计划与排程:实现快速计划排程并对需求 ...

最新文章

  1. 脑电数据预处理-ICA去除伪影
  2. 皮一皮:女友是有多么体贴...
  3. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史
  4. 从指定URL中提取文件名
  5. Alluxio 助力 Kubernetes,加速云端深度学习
  6. Spring 中的事件处理
  7. javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局
  8. 接口的定义与实现(重要)
  9. 彻底删除 mysql 5.7_Ubuntu16.04彻底删除MySQL5.7
  10. 【转】python模块分析之collections(六)
  11. 拓端tecdat|中国消费者共享汽车使用情况调查
  12. Spring 揭秘之Spring框架的由来
  13. Spyder单步调试
  14. 彻底解决pycharm中用matplotlib表格绘制时图表中汉字设置
  15. BroadcastReceiver生命周期探讨
  16. 华为服务器新版bios修改IPMI,华为服务器ipmi设置
  17. 快手在线查询权重网站源码+接口
  18. matlab 雷电,利用MATLAB实现对雷电监测数据的分析和绘图
  19. java玫瑰花代码_玫瑰花(示例代码)
  20. Python实现一个键盘记录器功能

热门文章

  1. http://www.myeclipseide.com/ 官网打不开的问题(转)
  2. Netty - 传输
  3. GUI(概述和布局)
  4. jquery实现抽奖系统
  5. 高性能的MySQL(5)索引策略-索引和表的维护
  6. 4月22日(牛马不对嘴)
  7. DataGrid 中的特殊应用
  8. Career Essentials Postgraduate Study: exploring your options 读完本科后干啥?
  9. 由病毒引发的肠胃感冒
  10. tip for interview