20200104模拟赛 问题A 图样
题目



分析:
老规矩,遇到期望要准备好随时投降。。。
大致想到了按位处理,然后分别下去搜索,再用组合数加加减减一下。。。
但是两个连通块之间连边的期望怎么算呢?
很好,投降。。。
下来看题解。。。
果然是记搜。。
首先我们设F(n,m)表示n个点取 [ 0 , 2^m )的值时所有最小生成树代价之和
那么Ans=F(n,m) / 2^(n*m)
再设G(S,T,m)表示一部分点集大小为S,另一部分大小为T,点权取值在[ 0 , 2^m )之间后,所有情况最小边权值的总和
于是F(n,m)可以记搜:
F(n,m)=
sigma(i=1...n) C(n,i)(选哪些点) * (
F( i , m-1 ) * 2^( (n-i) * (m-1) )(一部分向下搜索再乘方案数) +
F( n-i , m-1 ) * 2^( i * (m-1) )(另一部分) +
G( i , n-i , m-1)(中间连边) +
2 ^ (m-1) * 2 ^ ( n * (m-1) )(必须花费的代价乘上方案数) )
然后我们来求G:
我们叒设一个函数P(S,T,m,K)表示点集S,T,取值[ 0 , 2^m )时,边权最小值大于等于K的情况数
G(S,T,m)可以巧妙地化为sigma(i=1...(2^m-1))P(S,T,m,i)
奥妙重重,可以脑补一下,跟前缀和差不多的感觉
然后P就很好求了,暴力地将S和T继续按01位分割下去,某一位全部都不分割时统计入答案
三重记搜,式子还这么难
神仙题Orz
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector> #define maxn 55
#define maxm 9
#define MOD 258280327 using namespace std; inline long long getint()
{
long long num=,flag=;char c;
while((c=getchar())<''||c>'')if(c=='-')flag=-;
while(c>=''&&c<='')num=num*+c-,c=getchar();
return num*flag;
} int n,m;
long long C[maxn][maxn],F[maxn][maxm],G[maxn][maxn][maxm],P[maxn][maxn][maxm][<<maxm],pw[maxn*maxm]; inline long long ksm(long long num,long long k)
{
long long ret=;
for(;k;k>>=,num=num*num%MOD)if(k&)ret=ret*num%MOD;
return ret;
} inline long long getP(int S,int T,int M,int K)
{
if(S>T)swap(S,T);
if(!S||K<=)return pw[(S+T)*M];
if(K>=(<<M))return ;
if(~P[S][T][M][K])return P[S][T][M][K];
long long tmp=;
for(int i=;i<=S;i++)for(int j=;j<=T;j++)
if((i==&&j==T)||(i==S&&j==))tmp=(tmp+getP(S,T,M-,K-(<<(M-))))%MOD;
else tmp=(tmp+getP(i,j,M-,K)*getP(S-i,T-j,M-,K)%MOD*C[S][i]%MOD*C[T][j]%MOD)%MOD;
return P[S][T][M][K]=tmp;
} inline long long getG(int S,int T,int M)
{
if(!M)return ;
if(S>T)swap(S,T);
if(~G[S][T][M])return G[S][T][M];
long long tmp=;
for(int i=;i<(<<M);i++)
tmp=(tmp+getP(S,T,M,i))%MOD;
return G[S][T][M]=tmp;
} inline long long getF(int N,int M)
{
if(!M||N<)return ;
if(~F[N][M])return F[N][M];
long long tmp=*getF(N,M-)%MOD;
for(int i=;i<N;i++)
tmp=(tmp+C[N][i]*(getF(i,M-)*pw[(N-i)*(M-)]%MOD+getF(N-i,M-)*pw[i*(M-)]%MOD+getG(i,N-i,M-)+(<<(M-))*pw[N*(M-)]%MOD))%MOD;
return F[N][M]=tmp;
} int main()
{
n=getint(),m=getint();
pw[]=;for(int i=;i<=n*m;i++)pw[i]=pw[i-]*%MOD;
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])%MOD;
}
memset(F,-,sizeof F),memset(G,-,sizeof G),memset(P,-,sizeof P);
printf("%lld\n",getF(n,m)*ksm(pw[n*m],MOD-)%MOD);
}

20200104模拟赛 问题A 图样的更多相关文章
- 20200104模拟赛 问题C 上台拿衣服
题目 分析: 乍一看不就是从楼上扔鸡蛋那道题吗... 然后开始写写写... 设f [ i ] [ j ]表示 i 个记者膜 j 次可以验证多少层楼... 于是开始递推: 我们选取第 i 个记者去尝试其 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
- [GRYZ]寒假模拟赛
写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...
随机推荐
- codeforces 1167B Lost Numbers
传送门:https://codeforces.com/contest/1167/problem/B 题意: 交互题:现在你有6个数4, 8, 15, 16, 23, 42组成的某种组合,你可以询问系统 ...
- Mybatis与Spring集成(易百教程)
整个Mybatis与Spring集成示例要完成的步骤如下: 1.示例功能描述 2.创建工程 3.数据库表结构及数据记录 4.实例对象 5.配置文件 6.测试执行,输出结果 1.示例功能描述 在本示例中 ...
- 024.讲MFC_窗口指针
窗口指针通过HWND获得CWnd指针 //如何通过窗口句柄获得窗口指针获得应用程序主窗口的指针 //如何获得应用程序主窗口的指针一.建立名为dialogPoint的mfc工程,添加两个button 双 ...
- 微信群打卡机器人XiaoV项目开源 | 蔡培培的独立博客
原文首发于蔡培培的独立博客.原文链接<微信群打卡机器人XiaoV项目开源>. 5月21日,在米花(后面" 亚里士多德式友谊"专题会提及)的影响下,决定搞个私人运动群,拉 ...
- looping through multiple lists
map: 最大长度输出: zip: 最短输出: third: 有序排列: a = ['a1', 'a2', 'a3'] b = ['b1', 'b2'] print "Map:" ...
- easyUI dataGrid主从表点击展开问题
昨天在公司写代码遇到了一个问题,就是在用easyUI做主从表的时候在查询之后点击展开的时候不能再次展开了.先说一下主从表我也是第一次用 效果如下图: 然后点击前面的小加号出现以下效果: 然而遇到了一个 ...
- 微服务实战——微服务架构选型SpringCloud / Dubbo / K8S比较(一)
## 说在前面 大概是三年前,因一些原因公司原项目最初为单体结构部署,所有业务模块都在一个项目里面,而后随着业务的不断膨胀以及模块之间的耦合,导致后面增加或修改一些简单业务时的成本都会变的极大.新入职 ...
- @程序员,你们还在用网上乱找的方法导入导出Excel么,我们给你造了个轮子!!!!!
程序员的显著特点 有一天跟一位同事跟我闲聊,讨论起过去若干年软件行业的感受,他问了个问题:你觉得一个好的软件工程师最显著的特点是什么? 我想了一会,说:大概是坐得住吧. 某种意义上来说,在互联网技术飞 ...
- 美国权威媒体CRN预测:2020年值得关注的10个新兴云计算趋势
云计算在过去一年里极速发展,其速度之快,让人难以预测未来会发生什么.即使依照这些趋势而新发明的技术在不断变化并且极其脆弱,而推动这些趋势和技术不断发展的企业和组织最终也很有可能发生变化,但不妨碍这些大 ...
- 洛谷$P4585\ [FJOI2015]$火星商店问题 线段树+$trie$树
正解:线段树+$trie$树 解题报告: 传送门$QwQ$ $umm$题目有点儿长我先写下题目大意趴$QwQ$,就说有$n$个初始均为空的集合和$m$次操作,每次操作为向某个集合内加入一个数$x$,或 ...