BZOJ4770 图样(概率期望+动态规划)
考虑求出所有MST的权值和再除以方案数,方案数显然是2mn。
按位考虑,显然应该让MST里的边高位尽量为0。那么根据最高位是0还是1将点集划分成两部分,整张图的MST就是由两部分各自的MST之间连一条最小边得到的。两部分的MST权值和可以dp得到,即设f[i][j]表示i个点权值在0~2j-1的MST权值和,枚举最高位是0的点的数量k,由f[k][j-1]和f[i-k][j-1]转移而来。问题只剩下求最小边的权值和。
这个东西也不是很好求,考虑求最小边不小于某值的方案数。同样根据最高位是0还是1划分点集成四个部分,转移比较显然,主要注意边界,即所有边该位都为1的情况,以及某边没有点的情况。盯着这个边界调了一下午最后发现果然这里根本就没写挂,而是预处理2k时少了一部分。惨绝人寰。
复杂度O(n4m2m),虽然darkbzoj上只跑了3s,bzoj上还是根本卡不过去。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 51
#define M 8
#define P 258280327
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,C[N][N],f[N][M+],g[N][N][M],h[N][N][M][<<M],p[N*M];
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
int inv(int a)
{
int s=;
for (int k=P-;k;k>>=,a=1ll*a*a%P) if (k&) s=1ll*s*a%P;
return s;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4770.in","r",stdin);
freopen("bzoj4770.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read();
C[][]=;
for (int i=;i<=n;i++)
{
C[i][]=C[i][i]=;
for (int j=;j<i;j++)
C[i][j]=(C[i-][j-]+C[i-][j])%P;
}
p[]=;for (int i=;i<(n+)*m;i++) p[i]=(p[i-]<<)%P;
for (int i=;i<=n;i++)
for (int j=;j<=n-i&&j<=i;j++)
h[i][j][][]=;
for (int k=;k<m;k++)
for (int x=;x<(<<k);x++)
{
for (int i=;i<=n;i++) h[i][][k][x]=p[i*k];
for (int i=;i<=n;i++)
for (int j=;j<=n-i&&j<=i;j++)
for (int u=;u<=i;u++)
for (int v=;v<=j;v++)
if (u==&&j==v||i==u&&v==) inc(h[i][j][k][x],1ll*h[max(u,j-v)][min(u,j-v)][k-][max(x-(<<k-),)]*h[max(i-u,v)][min(i-u,v)][k-][max(x-(<<k-),)]%P);
else inc(h[i][j][k][x],1ll*C[i][u]*C[j][v]%P*h[max(u,v)][min(u,v)][k-][x]%P*h[max(i-u,j-v)][min(i-u,j-v)][k-][x]%P);
}
for (int i=;i<=n;i++)
for (int j=;j<=n-i&&j<=i;j++)
for (int k=;k<m;k++)
for (int x=;x<(<<k);x++)
inc(g[i][j][k],h[i][j][k][x]);
for (int k=;k<=m;k++)
for (int i=;i<=n;i++)
{
inc(f[i][k],f[i][k-]);inc(f[i][k],f[i][k-]);
for (int j=;j<i;j++)
inc(f[i][k],1ll*C[i][j]*(1ll*f[j][k-]*p[(i-j)*(k-)]%P+1ll*f[i-j][k-]*p[j*(k-)]%P+p[(k-)*(i+)]+g[max(j,i-j)][min(j,i-j)][k-])%P);
}
cout<<1ll*f[n][m]*inv(p[m*n])%P;
return ;
}
BZOJ4770 图样(概率期望+动态规划)的更多相关文章
- 【题解】亚瑟王 HNOI 2015 BZOJ 4008 概率 期望 动态规划
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4008 一道不简单的概率和期望dp题 根据期望的线性性质,容易想到,可以算出每张卡的期望伤害, ...
- BZOJ5305 HAOI2018苹果树(概率期望+动态规划)
每种父亲编号小于儿子编号的有标号二叉树的出现概率是相同的,问题相当于求所有n个点的此种树的所有结点两两距离之和. 设f[n]为答案,g[n]为所有此种树所有结点的深度之和,h[n]为此种树的个数. 枚 ...
- BZOJ4899 记忆的轮廓(概率期望+动态规划+决策单调性)
容易发现跟树没什么关系,可以预处理出每个点若走向分叉点期望走多少步才能回到上个存档点,就变为链上问题了.考虑dp,显然有f[i][j]表示在i~n中设置了j个存档点,其中i设置存档点的最优期望步数.转 ...
- BZOJ4832 抵制克苏恩(概率期望+动态规划)
注意到A+B+C很小,容易想到设f[i][A][B][C]为第i次攻击后有A个血量为1.B个血量为2.C个血量为3的期望伤害,倒推暴力转移即可. #include<iostream> #i ...
- UOJ#196. 【ZJOI2016】线段树 概率期望,动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ196.html 题解 先离散化,设离散化后的值域为 $[0,m]$ . 首先把问题转化一下,变成:对于每一个位置 $i$ ...
- BZOJ_3270_博物馆_(高斯消元+期望动态规划+矩阵)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3270 \(n\)个房间,刚开始两个人分别在\(a,b\),每分钟在第\(i\)个房间有\(p[ ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- uvalive 7331 Hovering Hornet 半平面交+概率期望
题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...
- OI队内测试一【数论概率期望】
版权声明:未经本人允许,擅自转载,一旦发现将严肃处理,情节严重者,将追究法律责任! 序:代码部分待更[因为在家写博客,代码保存在机房] 测试分数:110 本应分数:160 改完分数:200 T1: 题 ...
随机推荐
- EL/JSTL-jsp页面更简单的输出方式
1.EL(Expression Language):表达式语言,用于页面输出 格式:${表达式} EL支持四则运算,关系运算[常用eq来比较字符串或判断相等],逻辑运算 EL访问空间内对象,[类.对象 ...
- 北京Uber优步司机奖励政策(12月2日)
用户组:人民优步(适用于12月2日)奖励政策: 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:htt ...
- centos7 的防火墙命令调整了
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.firewall:systemctl start firewalld.service#启动firewalls ...
- eclipse报这个错误org.eclipse.swt.SWTError: No more handles (eclipse 和 TeamViewer 冲突)
错误: org.eclipse.swt.SWTError: No more handles at org.eclipse.swt.SWT.error(SWT.java:4387) a ...
- linux下的java开发环境
一.jdk的安装 1.复制jdk至安装目录,我们指定的安装目录是:/usr/local/java .可是系统安装后在/usr/local下并没有java目录,这需要我们去创建一个java文件夹,如图
- 小程序页面的四种文件(JSON、WXML、WXSS、JS)加载顺序
一个小程序页面由四种文件组成: 1)json 页面配置文件 2)js 页面逻辑文件(必需) 3)wxml 页面结构文件(必需) 4)wxss 页面样式文件 这四个文件的加载顺序: 第一步: 加载页面j ...
- 213. String Compression【LintCode java】
Description Implement a method to perform basic string compression using the counts of repeated char ...
- MySQL数据库怎么截取字符串?
函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my ...
- [转]bashrc与profile区别
作者:KornLee 2005-02-03 15:49:57 来自:Linux先生 /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/pro ...
- 【zabbix 监控】第一章 zabbix的安装配置
安装前准备 一.下载网络yum源: http://mirrors.163.com/.help/centos.html https://opsx.alibaba.com/mirror 1.首先备份/et ...