题意: n个数(1~n)取出r个数,取出的数相差要>=k, 然后分成m个可空组,问有多少种情况。

解法: 先看从n个数中取r个相差>=k的数的方法数,可以发现 dp[i][j] = dp[1][j-1] + dp[2][j-1] + ... + dp[i-k][j-1],(dp[i][1] = i)  即维护一个前缀和即可,可以在O(r*n)内得出。

然后n个不同的数分成m个可以空的组,即为第二类Strling数的和 : S[n][1] + S[n][2] + ... + S[n][m]。

S(p,k)的递推公式是:S(p,k)=k*S(p-1,k)+S(p-1,k-1) ,1<= k<=p-1
边界条件:

S(p,p)=1 ,p>=0

S(p,0)=0 ,p>=1

然后 方案数为 : S[n][1] + S[n][2] + ... + S[n][m]

然后两个结果相乘即可得出答案。

注意取模。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#define Mod 1000000007
#define lll __int64
using namespace std; lll dp[][],sum[][];
lll S[][]; int main()
{
int n,r,k,m;
int i,j;
for(i=;i<=;i++)
S[i][i] = , S[i][] = ;
S[][] = ;
for(int p=;p<=;p++)
for(int k=;k<=p-;k++)
S[p][k]=((k*S[p-][k]%Mod+S[p-][k-])%Mod+Mod)%Mod; while(scanf("%d%d%d%d",&n,&r,&k,&m)!=EOF)
{
memset(dp,,sizeof(dp));
memset(sum,,sizeof(sum));
for(i=;i<=n;i++)
dp[i][] = i, sum[i][] = (sum[i-][] + dp[i][])%Mod;
for(j=;j<=r;j++)
{
for(i=k+;i<=n;i++)
{
dp[i][j] = sum[i-k][j-]%Mod;
sum[i][j] = (sum[i-][j] + dp[i][j])%Mod;
}
}
lll ans=;
for(int i=;i<=m;i++)
ans+=S[r][i];
ans%=Mod;
ans=ans*dp[n][r];
printf("%I64d\n",(ans%Mod+Mod)%Mod);
}
return ;
}

HDU 4045 Machine scheduling --第二类Strling数的更多相关文章

  1. HDU 4045 Machine scheduling (组合数学-斯特林数,组合数学-排列组合)

    Machine scheduling Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. hdu 4045 Machine scheduling [ dp + 斯特林数]

    传送门 Machine scheduling Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  3. 自然数幂求和——第二类Strling数

    这个问题似乎有很多种求法,但感觉上第二类Strling数的做法是最方便的. 问题 求下面这个式子: ∑i=0nik\sum_{i=0}^n i^ki=0∑n​ik nnn的范围可以很大. 第二类Str ...

  4. HDU 2643 Rank:第二类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643 题意: 有n个个选手参赛,问排名有多少种情况(可以并列). 题解: 简化问题: 将n个不同的元素 ...

  5. HDU4045 Machine scheduling —— 隔板法 + 第二类斯特林数

    题目链接:https://vjudge.net/problem/HDU-4045 Machine scheduling Time Limit: 5000/2000 MS (Java/Others)   ...

  6. HDU Machine scheduling

    Machine scheduling Time Limit : 5000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  7. hdu 1150 Machine Schedule 最少点覆盖转化为最大匹配

    Machine Schedule Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  8. hdu 1150 Machine Schedule(二分匹配,简单匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 Machine Schedule Time Limit: 2000/1000 MS (Java/ ...

  9. POJ 1325、ZOJ 1364、HDU 1150 Machine Schedule - from lanshui_Yang

    Problem Description As we all know, machine scheduling is a very classical problem in computer scien ...

随机推荐

  1. ThinkPHP去掉URL中的index.php

    我的环境是apache+ubuntu 1,先确认你有没mod_rewrite.so模块 /usr/lib/apache2/modules/mod_rewrite.so 然后在httpd.conf最后一 ...

  2. ahjesus SSHkey登陆linux服务器,无需密码,ubuntu

    cd ~/.ssh/如果目录不存在就新建一个 mkdir ~/.ssh 制作公匙 ssh-keygen -t rsa默认会生成id_rsa.pub的公匙 将公匙推送到指定的服务器 scp id_rsa ...

  3. 身份证校验(c++实现)

    描述: 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码 ...

  4. RHEL7进程管理

    进程概念 名称 说明 程序 一组指令的集合 进程 程序的执行就是进程也可以把进程看成一个独立的程序在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己进程是资源分配的基本单位,也 ...

  5. 解决ArcGIS10.3属性表中文乱码问题

    问题描述:在10.3刚出为不久,就发现有时属性表会出现中文乱码的问题. 解决方法:在Cmd命令行中输入以下命令: reg add HKEY_CURRENT_USER\Software\ESRI\Des ...

  6. Atitit.图片木马的原理与防范 attilax 总结

    Atitit.图片木马的原理与防范 attilax 总结 1.1. 像图片的木马桌面程序1 1.2. Web 服务端图片木马1 1.3. 利用了Windows的漏洞1 1.4. 这些漏洞不止Windo ...

  7. 参加2013中国大数据技术大会(BDTC2013)

    2013年12月5日-6日参加了为期两天的2013中国大数据技术大会(Big Data Technology Conference, BDTC2013),本期会议主题是:“应用驱动的架构与技术 ”.大 ...

  8. NSOperation创建队列

    #pragma mark - NSOperation //NSOperation不能直接进行多线程的创建,需要帮助:NSOperationQueue // 使用NSOperation的第一个子类去创建 ...

  9. CollectionView 简用

    创建一个CollectionView 分为几个步骤 1.先创建布局FlowLayout 设置布局格式 2.创建CollectionView 并使用布局Flowlayout  -initWithFram ...

  10. iOS之 Mac下抓包工具使用wireshark

    主要是mac上面网卡的授权 分三个步骤:    1.wireshark安装        wireshark运行需要mac上安装X11,mac 10.8的系统上默认是没有X11的.先去http://x ...