Luogu P2612 [ZJOI2012]波浪
题目
我们考虑从\(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]波浪的更多相关文章
- 【BZOJ2817】[ZJOI2012]波浪(动态规划)
[BZOJ2817][ZJOI2012]波浪(动态规划) 题面 BZOJ 洛谷 题解 首先这个差值最大也就是\(n^2\)级别的. 那么这样子就可以压进状态啦. 我们把这个操作看成一个个加数的操作,按 ...
- 洛谷2612&&bzoj2817 [ZJOI2012]波浪
洛谷2612&&bzoj2817 [ZJOI2012]波浪 原题链接 题解 因为有abs不太好搞,考虑拆掉abs. 生成排列的方法之一:n个空位,从1到n一次插入一个空位. 这样搞的话 ...
- 题解 洛谷 P2612 【[ZJOI2012]波浪】DP+高精
题目描述 题目传送门 分析 因为有绝对值不好处理,所以我们强制从小到大填数 设 \(f[i][j][p][o]\) 为当前填到了第 \(i\) 个数,波动强度为 \(j\),有 \(p\) 个连续段并 ...
- bzoj2817[ZJOI2012]波浪
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2817 波浪 [问题描述] 阿米巴和小强是好朋友. 阿米巴和小强在大海旁边看海水的波涛.小 ...
- [ZJOI2012]波浪
Description: L = | P2 – P1 | + | P3 – P2 | + - + | PN – PN-1 | 给你一个N和M,问:随机一个1-N的排列,它的波动强度(L)不小于M的概率 ...
- Luogu2612 ZJOI2012 波浪 DP
传送门 花掉了自己用来搞学科的时间做了这道题-- 一道类似的题:Here 考虑拆开绝对值计算贡献.那么我们对于\(1\)到\(N\)的排列,从小到大地将插入它们插入排列中. 假设我们现在计算到了数\( ...
- Luogu P2597 [ZJOI2012]灾难
一道非常综合的好题然后就莫名其妙地知道了动态LCA的求法 果然是ZJOI的题目,只能说这思路服了 首先我们发现每次操作只会灭绝一种动物,然后我们想一下就知道如果有\(n(n>=2)\)个食物的动 ...
- [ZJOI2012]波浪弱化版(带技巧的DP)
题面 \(solution:\) 这道确实挺难的,情况特别多,而且考场上都没想到如何设置状态.感觉怎么设状态不能很好的表示当前情况并转移,考后发现是对全排列的构造方式不熟而导致的,而这一题的状态也是根 ...
- Luogu 2173 [ZJOI2012]网络 - LCT
Solution $LCT$ 直接上$QuQ$ 注意$cut$ 完 需要 $d[u + c * N]--$ 再 $link$, 不然会输出Error 1的哦 Code #include<cs ...
随机推荐
- tp5商城
记录几个要点: 用户使用firbug伪造表单字段,比如伪造表单id字段,如何防止,tp5中好像没有. xss攻击:使用htmlspecialchars() 会把img.p.等等合法标签过滤掉,想要有选 ...
- maven项目创建2
添加依赖索引 但是默认是没有索引的,要手动创建索引 依赖范围 debug 配置 运行常见问题 处理办法,JDK重新安装 网络添加依赖网站
- POJ 1087 最大流裸题 + map
A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15597 Accepted: 5308 ...
- CF1213G Path Queries
题目链接 问题分析 直接按边从小到大加入,求所有的连通点对数量即可.最后离线询问.使用并查集维护Size. 参考程序 #include <bits/stdc++.h> using name ...
- JavaWeb_(Jar)使用fastjson解析json和序列化对象
菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...
- vue下实现input实现图片上传,压缩,拼接以及旋转
背景 作为一名前端工作人员,相信大家在开发系统的时候,经常有遇到需要这么一种需求,就是需要为用户保存上传的图片,很多小白遇到这个问题的时候,都会虎躯一震,以为会是一个棘手的问题,当你读完这篇文章的时候 ...
- 自动化部署脚本之windows上执行批处理文件
windows .bat 批处理 脚本路径如下: install-simo.bat文件内容: @ECHO OFF set scriptpath=%~dp0set logfile=%scriptpa ...
- vue-preview 缩略图
如果我们在 vue 中想使用缩略图的话,可以使用 vue-preview 的插件 小图的缩略 大图的样式 使用方法:vue-preview 下 载: npm i vue-preview 使用方法 ...
- IDEA里面maven菜单解读
- sharesdk短信验证码的集成
在ShareSDK官网http://mob.com/注册并创建Android应用.申请APP_key,下载SDK等 根据官网开发文档导入SDK,目录结构如下 将以上文件按需放入Android Stud ...