枚举每个点到$1$的距离,若$>k$则视为$k+1$,那么$d_1=1,d_n=k$。

对于$i$,如果$1\leq d_i\leq k$,则一定要存在一条边长度为$d_i-d_j$,且其他边长度都要$\geq d_i-d_j$。

如果$d_i>k$,那么对于每条边都满足长度$>k-d_j$。

枚举每个$d$的个数,通过排列组合进行指派,然后通过DP计算方案数。

状态为$f[i][j]$表示$x$考虑了$1$到$i$这些点的连边,是否存在一条边使得这个距离合法的方案数。

时间复杂度$O(nB(n))$。

#include<cstdio>
const int N=15,P=1000000007;
int T,n,k,L,i,j,C[N][N],d[N],now,ret,f[2],ans;
inline int fix(int x){return x<L?x:L;}
void dfs(int x,int y,int z,int now){
if(x==2&&y==0)return;
d[x]=y;z|=y==k;
if(x>1)if(y<=k){
f[0]=1,f[1]=0;
for(i=1;i<x;i++)if(d[i]==y){
f[0]=1LL*f[0]*L%P;
f[1]=1LL*f[1]*L%P;
}else{
f[1]=(1LL*f[1]*(L-y+d[i]+1)+f[0])%P;
f[0]=1LL*f[0]*(L-y+d[i])%P;
}
now=1LL*now*f[1]%P;
}else for(i=1;i<x;i++)now=1LL*now*fix(L-k+d[i])%P;
if(x==n){
if(!z)return;
for(ret=n-2,i=2;i<=n;i=j){
for(j=i;j<=n&&d[i]==d[j];j++);
if(d[i]==k)i++;
now=1LL*now*C[ret][j-i]%P;
ret-=j-i;
}
ans=(ans+now)%P;
return;
}
for(;y<=k+1;y++)dfs(x+1,y,z,now);
}
int main(){
for(C[0][0]=i=1;i<N;i++)for(C[i][0]=j=1;j<=i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&k,&L);
if(n==1||k>L){puts("0");continue;}
if(n==2){puts("1");continue;}
dfs(1,ans=0,0,1);
printf("%d\n",ans);
}
return 0;
}

  

BZOJ3868 : The only survival的更多相关文章

  1. (转)A Survival Guide to a PhD

    Andrej Karpathy blog About Hacker's guide to Neural Networks A Survival Guide to a PhD Sep 7, 2016 T ...

  2. survival analysis 生存分析与R 语言示例 入门篇

    原创博客,未经允许,不得转载. 生存分析,survival analysis,顾名思义是用来研究个体的存活概率与时间的关系.例如研究病人感染了病毒后,多长时间会死亡:工作的机器多长时间会发生崩溃等. ...

  3. (转) A Survival Guide to a PhD

    A Survival Guide to a PhD Sep 7, 2016 This guide is patterned after my “Doing well in your courses”, ...

  4. JSBinding + SharpKit / 实战:转换 Survival Shooter

    从 asset store 下载 Survival Shooter (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2.如果) 1 删除多 ...

  5. A Mathematician‘s Survival Guide Graduate School and Early Career Development

    推荐大家一本书尤其是即将读研究生或者研一研二的学生:                                                     A Mathematician‘s  Su ...

  6. 生存模型(Survival Model)介绍

    https://www.cnblogs.com/BinbinChen/p/3416972.html 生存分析,维基上的解释是: 生存分析(Survival analysis)是指根据试验或调查得到的数 ...

  7. [LightOJ 1265] Island of Survival

    Island of Survival You are in a reality show, and the show is way too real that they threw into an i ...

  8. Survival Analysis

    code{white-space: pre;} Survival Analysis Zhu Lin 2017-3-18 What is Survival Analysis Survival analy ...

  9. Spark2 生存分析Survival regression

    在spark.ml中,实现了加速失效时间(AFT)模型,这是一个用于检查数据的参数生存回归模型. 它描述了生存时间对数的模型,因此它通常被称为生存分析的对数线性模型. 不同于为相同目的设计的比例风险模 ...

随机推荐

  1. Android接口传递Json数组的处理方式

    public static XTResult<Void> addTravel(String uuid, String travelName, String travelId, String ...

  2. JPush集成

    JPush SDK 收到推送,通过广播的方式,转发给开发者App,这样开发者就可以灵活地进行处理. 这个动作不是必须的.用户有需要才定义 Receiver 类来处理 SDK过来的广播. 如果不做这个动 ...

  3. core

    http://blog.csdn.net/xiaoxiaoniaoer1/article/details/7740820 1.core文件的生成开关和大小限制--------------------- ...

  4. C#回顾 – 4.IEnumerable 集合

         

  5. HTML+CSS页面滚动效果处理

    HTML+CSS代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> ...

  6. C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

    tfref 前言 C++对象的内存布局 只有数据成员的对象 没有虚函数的对象 拥有仅一个虚函数的对象 拥有多个虚函数的对象 单继承且本身不存在虚函数的继承类的内存布局 本身不存在虚函数(不严谨)但存在 ...

  7. android 入门-android Studio 配置

    重要:sdk 最好先有一个版本 19版本.build-tools 19.1.0 extras 19.0和platforms android-19 1.下载android sdk 和jdk 并配置环境变 ...

  8. [Outlook] Outlook2013能收但无法发送邮件-0x800CCC13, 0x800CCC0B, 0x8004210B

    [20140704更新],在公司收邮件的时候,问题再次出现,错误码:0x800ccc13,按照以下方法测试成功: 1. 按照以前办法,反复重启,失败 2. 按照以下参考连接A中的步骤 a. Click ...

  9. Codeforces Beta Round #95 (Div. 2) D.Subway

    题目链接:http://codeforces.com/problemset/problem/131/D 思路: 题目的意思是说给定一个无向图,求图中的顶点到环上顶点的最短距离(有且仅有一个环,并且环上 ...

  10. NSArray 所有基础点示例

    #import <Foundation/Foundation.h> //排序算法,应用于 NSArray *arr=[arrs1 sortedArrayUsingFunction:sort ...