2021 年百度之星·程序设计大赛 - 初赛一

1001

题意:给出一个无向图,其中边有两种,附魔和没附魔的。初始在1号点,状态为没附魔,每次会等概率随机挑选一条边走,当经过附魔边时,状态会改变(附魔->没附魔,没附魔->附魔),问走k步后到达n号点状态为附魔的概率。

比赛时,我错误的认为走出每条路径的概率都是相等的,一个反例如下:

 路径1-2-5的概率为\frac{1}{2}*\frac{1}{2}=\frac{1}{4},而路径1-3-5的概率为\frac{1}{2}*\frac{1}{3}=\frac{1}{6}

首先讲一下官方题解做法:

最终答案为:走k步到n且状态为附魔的概率/任意走k步的概率

显然任意走k步的概率为1,所以只需求出分子。我们发现,如果没有状态,是很容易求出1到n的概率,所以我们可以将状态转化到点上:将每一个点拆成两个,附魔点和没附魔点,代表当前的状态。若一条边时附魔边,则将对应的一点的附魔点于另一点没附魔点相连,若是普通边,则将对应的附魔点和没附魔点相连。

这样转化后,我们发现只需求出1号没附魔点到n号附魔点的概率就行了。

复杂度O(n^3logk)

接下来是我比赛时的做法:

还是求走k步到n且状态为附魔的概率,设数组c[i][j]表示从i到j,且满足在j点是状态为附魔的概率,a[i][j]表示从i到j的概率,但对在j点的状态没有限制。

考虑矩阵乘法中的一次转移,枚举了从i到j的一个中间点k,a[i][j](转移后的)可以直接加上a[i][k]*a[k][j],那么考虑c,有两种情况,从i到k时变成附魔,而从k到j状态不变,概率为c[i][k]*(a[k][j]-c[k][j]),对应的,另一种情况的概率为(a[i][k]-c[i][k])*c[k][j],两种情况相加即可。

 复杂度同样为O(n^3logk)

1003

题意:有n台电脑,其中第k台电脑坏了,有m个交换方式依次进行,问对于1~n,使得最后坏的电脑交换到这个位置,最少放弃几次操作

我们可以定义一个状态f[i][j]表示前i个操作,交换到j的最小代价(即最少放弃几次操作)

对于每个交换(a, b),与其无关的剩下n-2个电脑是否放弃此次操作并无关系,所以为使代价最小,此次不放弃,即f[i][j]=f[i-1][j](j\neq a, b)

而对于a,如果执行此次交换操作,那么代价为f[i-1][b],而如果放弃,则代价为f[i-1][a]+1,取两者较小值即可

利用滚动数组优化空间,复杂度为O(Tm)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值