【四川04年省选day2——洪水】状态压缩dp

题目:

乡下有n(n<=8)个小村庄,用m条双向道路连接起来,每两个村庄最多用一条道路直接连接。最近村庄闹涝灾,洪水让这些道路各有一定的概率被淹没,而这些道路被淹没与否是相互独立的。你的任务是计算出所有村庄连在一起(即:从任意一个村庄都可以经过未被淹没的道路到达其他所有村庄)的概率有多大。

分析:n=8,显然不是裸搜就是状态压缩dp,裸搜显然也是很难过的,那么本题的方向就出来了

算法:

   记f[i]表示i这个状态中所有的点连通的概率,如果直接把要选的点分成2个集合什么的做法是会算重的

   而为了避免算重,我们需要规定一些东西,比方说可以这样规定:先孤立出所选集合中的第一个点,然后枚举其他点的连通情况,且其他点形成的连通块之间不能直接相连,只能和这个孤立出的点相连,如图

fly

里面需要套一个搜其他点连通情况的dfs,惊奇发现大过程套小过程,小过程还可以调用大过程,而且大过程的局部变量是小过程的全程变量,只是debug的时候监控不了,使我郁闷好久,考完才想到解决办法。。

大部分概率计算都比较飘,这题也不例外,我差不多花了一个多小时才晓得样例是怎么搞的。。。

这题数据规模真是小,我这个O(2^n*n!*n^2)居然全0ms啦,哈哈。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值