Sol

期望DP.

\(f[i][j][k]\) 表示已经确定了 \(i\) 个点, 最大环大小为 \(j\) ,个数为 \(k\) 的方案数.

转移非常复杂,因为细节特别多.

\(f[i][j][1]=\frac{A_{j}^{n}}{j},i=j,k=1\)

\(f[i][j][1]=\frac{A_{j}^{n-i+j}}{j} \sum_{l=1}^{j} g[i][j],i>j,k=1\)  这个地方的 \(g[i][j]\) 我写的跟论文里的不太一样...不知道是论文里写错了还是我理解错了.

\(f[i][j][k]=f[i-j][j][k-1]\frac{A_{j}^{n-i+j}}{jk},i>j,1<k*j<=i\) 因为要考虑几个环的顺序,所以要除去一个 \(k\) 的排列.

其中 \(g[i][j]=\sum_{l=2}^{\frac{i}{j}} f[i][j][l] \)

\(n<=100\) 没人打表?打表Rank1系列.

Update:因为期望总是小于 \(100\) ,而double类型以对数方式储存,所以可以保证答案的正确性.

Code

/**************************************************************
Problem: 2685
User: BeiYu
Language: C++
Result: Accepted
Time:392 ms
Memory:10508 kb
****************************************************************/ #include<cstdio>
#include<iostream>
using namespace std; const int N = 105; int n;
double fac[N],A[N][N];
double f[N][N][N],g[N][N],d[N];
double ans; int main(){
// freopen("in.in","r",stdin);
scanf("%d",&n); fac[0]=1;for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i;
for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) A[i][j]=fac[i]/fac[i-j];
d[1]=0,d[2]=1;for(int i=3;i<=n;i++) d[i]=(i-1)*(d[i-1]+d[i-2]); for(int i=1;i<=n;i++){
for(int j=2;j<=i;j++){
if(i==j) f[i][j][1]=A[n][j]/j;
else{
for(int l=2;l<j;l++) f[i][j][1]+=g[i-j][l];
f[i][j][1]*=A[n-i+j][j]/j;
}
for(int k=2;k*j<=i;k++) f[i][j][k]=f[i-j][j][k-1]*A[n-i+j][j]/j/k;
}
for(int j=2;j<=i;j++) for(int k=1;k*j<=i;k++) g[i][j]+=f[i][j][k];
} for(int j=2;j<=n;j++) for(int k=1;k*j<=n;k++) ans+=j*k*f[n][j][k];
ans/=d[n];
printf("%.14lf\n",ans);
return 0;
}

  

BZOJ 2685: Sgu385 highlander的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. 概率dp学习记录

    论文参考 汤可因<浅谈一类数学期望问题的解决方法> 反正是很神奇的东西吧..我脑子不好不是很能想得到. bzoj 1415 1415: [Noi2005]聪聪和可可 Time Limit: ...

  3. 概率dp初探

    论文链接:  http://wenku.baidu.com/link?url=vEcfxpqAvGRf6JL9IL2R6v8plBgPnaP3tKp5niOBmoajk0y4CcpwFzL4SkfGS ...

  4. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  5. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  6. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  7. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  8. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  9. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

随机推荐

  1. Runner站立会议01

    开会时间:9.10-9.30 地点:二教 今天做了什么:学了文本输入,button按钮,界面转换(意图) 遇到什么困难:界面转换时,出现问题,没有正常跳转 明天打所作什么:解决今天遇到的问题,学了第二 ...

  2. Java反射机制<2>

    反射机制还可以调用类中的指定方法或指定属性,并且可以通过反射完成对数组的操作. 通过反射调用类中的方法 import java.lang.reflect.Method; //============= ...

  3. Android学习笔记——CheckBox

    该工程的功能实现在一个activity中显示一个单选框和一个多选框 以下代码是MainActivity.java文件中的代码 package com.example.checkbox; import ...

  4. ajax成功跨域_自己写的

    跨域的简单原理:一般浏览器会阻止js请求异端服务器(A服务器请求B服务器).js连接却除外 如:<script type="text/jscript" src="h ...

  5. AutoMocker单元测试

    /// <summary> /// 测试获取所有物流 /// </summary> [TestMethod] public void TestExpressController ...

  6. linq多表join与group

    var query =from a in this.ObjectContext.siteInfo join b in this.ObjectContext.shopInfo on a.siteID e ...

  7. centos 7.0 查看根目录下所有文件夹

    centos 7.0最小化安装 第一行是登录 [root@localhost ~]# [root@localhost ~]# cd ../ [root@localhost /]# ls bin dev ...

  8. JavaScript parseInt函数

    首先还是从很热门的实例parseInt("09")==0说起. parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制. 比如说pa ...

  9. knockout-validation不自动插入错误消息

    <div data-bind="validationOptions:{insertMessages:false}"> <div class="valid ...

  10. Orchard源码分析(4):Orchard.Environment.OrchardStarter类

    概述 OrchardStarter类是个静态类,主要作用是配置Autofac容器以及创建IOrchardHost(DefaultOrchardHost)对象,分别对应CreateHost和Create ...