[CF403D]Beautiful Pairs of Numbers
题意:给定$n,k$,对于整数对序列$\left(a_1,b_1\right),\cdots,\left(a_k,b_k\right)$,如果$1\leq a_1\leq b_1\lt a_2\leq b_2\lt\cdots\lt a_k\leq b_k\leq n$且所有的$b_i-a_i$互不相同,则称这个序列是“美丽的”,求美丽的序列的个数
先转化一下,把每个数对$\left(a_i,b_i\right)$看作一个区间$\left[a_i,b_i\right]$,则题目要求的是$k$个长度不同的区间互不重叠地放置在$[1,n]$的方案数
记$f_{i,j}$表示$i$个长度不同的区间总长为$j$且按长度递增排列的方案数,则$f_{0,0}=1,f_{i,j}=f_{i,j-i}+f_{i-1,j-i}$(可以直接把原方案的每个区间长度$+1$,或者在这个基础上再增加一个长度为$1$的区间)
那么答案是$k!\sum\limits_{i=1}^n\binom{n-i+k}kf_{k,i}$
相当于是枚举所有区间的总长,对于总长为$i$的所有方案($f_{k,i}$),把区间塞到$[1,n]$后我们还有$n-i$的空隙,相当于计算有$k$个区间和$n-i$个空隙的排列数($\binom{n-i+k}k$),因为$f$计数的是按长度递增排列的方案数,所以最后乘上$k!$表示任意排列
以上所有的东西(组合数,$f$,答案)都可以预处理出来,然后$O(1)$回答询问即可
不是这样的我没有在刷水题
#include<stdio.h>
typedef long long ll;
const int mod=1000000007,N=1000,K=50;
int fac[1010],rfac[1010],f[60][1010],ans[1010][60];
int mul(int a,int b){return a*(ll)b%mod;}
int ad(int a,int b){return(a+b)%mod;}
int C(int n,int k){return mul(fac[n],mul(rfac[n-k],rfac[k]));}
int pow(int a,int b){
int s=1;
while(b){
if(b&1)s=mul(s,a);
a=mul(a,a);
b>>=1;
}
return s;
}
int main(){
int i,j,k,t,n;
fac[0]=1;
for(i=1;i<=N;i++)fac[i]=mul(fac[i-1],i);
rfac[N]=pow(fac[N],mod-2);
for(i=N;i>0;i--)rfac[i-1]=mul(rfac[i],i);
f[0][0]=1;
for(i=1;i<=K;i++){
for(j=i*(i+1)/2;j<=N;j++)f[i][j]=ad(f[i][j-i],f[i-1][j-i]);
}
for(i=1;i<=N;i++){
for(k=1;k<=K;k++){
for(j=k*(k+1)/2;j<=i;j++){
ans[i][k]=ad(ans[i][k],mul(C(i-j+k,k),f[k][j]));
}
ans[i][k]=mul(ans[i][k],fac[k]);
}
}
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
if(k>K)
puts("0");
else
printf("%d\n",ans[n][k]);
}
}
[CF403D]Beautiful Pairs of Numbers的更多相关文章
- CF 403D Beautiful Pairs of Numbers
The sequence of integer pairs (a1, b1), (a2, b2), ..., (ak, bk) is beautiful, if the following state ...
- Codeforces 403D: Beautiful Pairs of Numbers(DP)
题意:转换模型之后,就是1~n个数中选k个,放到一个容量为n的背包中,这个背包还特别神奇,相同的物品摆放的位置不同时,算不同的放法(想象背包空间就是一个长度为n的数组,然后容量为1的物体放一个格子,容 ...
- Pairs of Numbers
#include<stdio.h> //we have defined the necessary header files here for this problem. //If add ...
- Find Unique pair in an array with pairs of numbers 在具有数字对的数组中查找唯一对
给定一个数组,其中每个元素出现两次,除了一对(两个元素).找到这个唯一对的元素. 输入:第一行输入包含一个表示测试用例数的整数T.然后T测试用例如下.每个测试用例由两行组成.每个测试用例的第一行包含整 ...
- 【题解】CF#403 D-Beautiful Pairs of Numbers
这题还挺对胃口的哈哈~是喜欢的画风!回家路上一边听歌一边想到的解法,写出来记录一下…… 首先,由于 \(b_{k} < a_{k + 1}\) ,所以我们可以看作是在一个长度为 n 的序列上选择 ...
- cf 403 D
D. Beautiful Pairs of Numbers time limit per test 3 seconds memory limit per test 256 megabytes inpu ...
- POJ 1320 Street Numbers 【佩尔方程】
任意门:http://poj.org/problem?id=1320 Street Numbers Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- Codeforces 395 D.Pair of Numbers
D. Pair of Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- POJ 1320 Street Numbers 解佩尔方程
传送门 Street Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2529 Accepted: 140 ...
随机推荐
- (一)STM32固件库详解(转载)
本篇博文是转载自emouse,因为不能直接转载,所以是复制过来再发布的. emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/ 1.1 基于标准外设库的 ...
- POJ3159:Candies(差分约束)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 39666 Accepted: 11168 题目链接:h ...
- maven项目在eclipse tomcat正常运行
转摘自:http://binary.duapp.com/2013/10/1577.html 配置下部署路径即可.
- C# windows application Hello World
创建一个Windows application项目,然后可以调用里面的工具来生成代码. using System; using System.Collections.Generic; using Sy ...
- 利用vue-cli创建Vue项目
1.安装node.js:Node.js安装包及源码下载地址为:https://nodejs.org/en/download/. 配置参考:http://www.runoob.com/nodejs/no ...
- 【数据结构】bzoj1455罗马游戏
Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...
- php多虚拟主机配置
一.配置httpd.conf# Virtual hosts#Include conf/extra/httpd-vhosts.conf //取消这一行的# 二.配置httpd-vhosts. ...
- java基础学习(一)hashcode
hashcode的作用 hashCode()方法是从Object类继承过来的,Object类中的hashCode()方法返回的是对象在内存中地址转换成的int值,如果对象没有重写hashCode()方 ...
- openstack 问题澄清
1. neutron中plugin与agent是一一对应的吗? 在不使用ml2时,plugin与agent一一对应,如ovs-plugin与ovs-agent:当使用ml2 plugin时,该plug ...
- Nginx的主要配置参数说明
#定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...