题目

我们考虑从\(1\)到\(n\)把每个数放到序列里面去,以消掉绝对值。

在最后的序列中,如果\(i\)的某一边是序列的边界,那么\(i\)会产生\(0\)的贡献。如果\(i\)的某一边是一个比\(i\)小的数,那么\(i\)会产生\(i\)的贡献。如果\(i\)的某一边是一个比\(i\)大的数,那么\(i\)会产生\(-i\)的贡献。

当我们放\(i\)时,所有小于\(i\)的数都已经放进序列了,而大于\(i\)的还没放。

那么最后的序列中\(i\)的左右两边的情况就等同于放\(i\)的时候\(i\)两边是否紧贴着某个数。

所以我们可以把连通块(一个极大的连续的放了数的段)的情况和边界的情况放进dp的状态里。

设\(f_{i,j,k,l}\)表示放了\(i\)个数,序列中存在\(j\)个连通块,总贡献为\(k\)(这一维需要平移\(5000\)),有\(l\)个边界已经被紧贴(\(l=0,1,2\))的方案数。

发现第一维\(i\)显然是可以滚掉的。

那么有以下几个转移:

\(1.i\)一边是边界,一边是空:\(f_{j,k,l}(2-p)->f_{j+1,k-i,l+1}\)。

\(2.i\)一边是边界,一边是连通块:\(f_{j,k,l}(2-p)->f_{j,k+i,l+1}\)。

\(3.\)两边都是连通块:\(f_{j,k,l}(j-1)->f_{j-1,k+2i,l}\)。

\(4.\)两边都是空:\(f_{j,k,l}(j+1-l)->f_{j+1,k-2i,l}\)。

\(5.\)一边是连通块,一边是空:\(f_{j,k,l}(j*2-l)->f_{j,k,l}\)。

那么最后的答案就是\(\frac{\sum\limits_{i=5000+m}^{10000}f_{1,i,2}}{n!}\)。

注意要数据类型分治。

#include<bits/stdc++.h>
using namespace std;
const int N=107,M=10007;
namespace db{long double f[2][N][M][3];}
namespace flt{__float128 f[2][N][M][3];}
int min(int a,int b){return a<b? a:b;}
int n,m,k;
template<class T>void out(T ans)
{
cout<<"0.",ans*=10;
for(int i=1;i<=k;++i) cout<<(int)(ans+(k==i)*0.5),ans=(ans-(int)ans)*10;
}
template<class T>void solve(T f[][N][M][3])
{
T ans=0;
f[0][0][5000][0]=1;
int g=0,i,j,k,p;
for(i=1;i<=n;++i)
{
g^=1,memset(f[g],0,sizeof f[g]);
for(j=0;j<=min(i-1,m);++j)
for(k=0;k<=10000;++k)
for(p=0;p<=2;++p)
if(f[g^1][j][k][p])
{
if(k>=2*i) f[g][j+1][k-2*i][p]+=f[g^1][j][k][p]*(j+1-p);
if(j) f[g][j][k][p]+=f[g^1][j][k][p]*(j*2-p);
if(j>=2&&k+2*i<=10000) f[g][j-1][k+2*i][p]+=f[g^1][j][k][p]*(j-1);
if(p^2)
{
if(k>=i) f[g][j+1][k-i][p+1]+=f[g^1][j][k][p]*(2-p);
if(j&&k+i<=10000) f[g][j][k+i][p+1]+=f[g^1][j][k][p]*(2-p);
}
}
}
for(i=m;i<=5000;++i) ans+=f[g][1][5000+i][2];
for(i=1;i<=n;++i) ans/=i;
out(ans);
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
if(k<=8) solve(db::f);
else solve(flt::f);
}

Luogu P2612 [ZJOI2012]波浪的更多相关文章

  1. 【BZOJ2817】[ZJOI2012]波浪(动态规划)

    [BZOJ2817][ZJOI2012]波浪(动态规划) 题面 BZOJ 洛谷 题解 首先这个差值最大也就是\(n^2\)级别的. 那么这样子就可以压进状态啦. 我们把这个操作看成一个个加数的操作,按 ...

  2. 洛谷2612&&bzoj2817 [ZJOI2012]波浪

    洛谷2612&&bzoj2817 [ZJOI2012]波浪 原题链接 题解 因为有abs不太好搞,考虑拆掉abs. 生成排列的方法之一:n个空位,从1到n一次插入一个空位. 这样搞的话 ...

  3. 题解 洛谷 P2612 【[ZJOI2012]波浪】DP+高精

    题目描述 题目传送门 分析 因为有绝对值不好处理,所以我们强制从小到大填数 设 \(f[i][j][p][o]\) 为当前填到了第 \(i\) 个数,波动强度为 \(j\),有 \(p\) 个连续段并 ...

  4. bzoj2817[ZJOI2012]波浪

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2817 波浪 [问题描述] 阿米巴和小强是好朋友. 阿米巴和小强在大海旁边看海水的波涛.小 ...

  5. [ZJOI2012]波浪

    Description: L = | P2 – P1 | + | P3 – P2 | + - + | PN – PN-1 | 给你一个N和M,问:随机一个1-N的排列,它的波动强度(L)不小于M的概率 ...

  6. Luogu2612 ZJOI2012 波浪 DP

    传送门 花掉了自己用来搞学科的时间做了这道题-- 一道类似的题:Here 考虑拆开绝对值计算贡献.那么我们对于\(1\)到\(N\)的排列,从小到大地将插入它们插入排列中. 假设我们现在计算到了数\( ...

  7. Luogu P2597 [ZJOI2012]灾难

    一道非常综合的好题然后就莫名其妙地知道了动态LCA的求法 果然是ZJOI的题目,只能说这思路服了 首先我们发现每次操作只会灭绝一种动物,然后我们想一下就知道如果有\(n(n>=2)\)个食物的动 ...

  8. [ZJOI2012]波浪弱化版(带技巧的DP)

    题面 \(solution:\) 这道确实挺难的,情况特别多,而且考场上都没想到如何设置状态.感觉怎么设状态不能很好的表示当前情况并转移,考后发现是对全排列的构造方式不熟而导致的,而这一题的状态也是根 ...

  9. Luogu 2173 [ZJOI2012]网络 - LCT

    Solution $LCT$ 直接上$QuQ$ 注意$cut$ 完 需要 $d[u + c * N]--$ 再  $link$,  不然会输出Error 1的哦 Code #include<cs ...

随机推荐

  1. tp5商城

    记录几个要点: 用户使用firbug伪造表单字段,比如伪造表单id字段,如何防止,tp5中好像没有. xss攻击:使用htmlspecialchars() 会把img.p.等等合法标签过滤掉,想要有选 ...

  2. maven项目创建2

    添加依赖索引 但是默认是没有索引的,要手动创建索引 依赖范围 debug  配置 运行常见问题 处理办法,JDK重新安装 网络添加依赖网站

  3. POJ 1087 最大流裸题 + map

    A Plug for UNIX Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15597   Accepted: 5308 ...

  4. CF1213G Path Queries

    题目链接 问题分析 直接按边从小到大加入,求所有的连通点对数量即可.最后离线询问.使用并查集维护Size. 参考程序 #include <bits/stdc++.h> using name ...

  5. JavaWeb_(Jar)使用fastjson解析json和序列化对象

    菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...

  6. vue下实现input实现图片上传,压缩,拼接以及旋转

    背景 作为一名前端工作人员,相信大家在开发系统的时候,经常有遇到需要这么一种需求,就是需要为用户保存上传的图片,很多小白遇到这个问题的时候,都会虎躯一震,以为会是一个棘手的问题,当你读完这篇文章的时候 ...

  7. 自动化部署脚本之windows上执行批处理文件

    windows  .bat  批处理 脚本路径如下: install-simo.bat文件内容: @ECHO OFF set scriptpath=%~dp0set logfile=%scriptpa ...

  8. vue-preview 缩略图

    如果我们在 vue 中想使用缩略图的话,可以使用 vue-preview 的插件 小图的缩略 大图的样式 使用方法:vue-preview 下  载:   npm i vue-preview 使用方法 ...

  9. IDEA里面maven菜单解读

  10. sharesdk短信验证码的集成

    在ShareSDK官网http://mob.com/注册并创建Android应用.申请APP_key,下载SDK等 根据官网开发文档导入SDK,目录结构如下 将以上文件按需放入Android Stud ...