有问题在Codeforces名称运气不好岛这是一种动态编程问题这里是问题的关联
D. Bad Luck Island
我目前不理解这个问题,所以我读了它的教程,这里是教程
让我们计算值dp [r] [s] [p] - 当r rock,s剪刀和p纸存活时的情况概率。初始概率为1,为了计算其他概率,我们应该执行转换。
想象一下,我们有r rock,s剪刀和p纸。让我们找到杀死剪刀的概率(其他概率以相同的方式计算)。一个物种杀死另一个物种的可能对的总数是rs + rp + sp,并且可能的对(岩石,剪刀)的数量是rs。由于所有会议都是等概率的,我们想要找到的概率是。这是我们进入状态dp [r] [s - 1] [p]的概率,剪刀的数量减去1。
最后,例如,为了得到岩石活着的事件的概率,我们应该将i的所有值dp [i] [0] [0]从1加到r(同样的是其他物种)。
我理解其中的大部分而只是一部分它说dp[r][s][p] — the probability of the situation when r rocks, s scissors and p papers are alive
这句话是什么意思,他说的概率是多少?
我只是没有得到这一部分。
有没有人可以解释dp[r][s][p]
的定义是什么?
答案 0 :(得分:0)
dp[r][s][p]
是概率(在所有可能的随机事件序列中),完全 r
岩石,s
剪刀和p
在岛上活着的文件。关键是,如果在任何时候出现r!=0
和s==0
以及p==0
的情况,那么这是一个终端状态。我们想要计算达到这个终端状态的概率。由于有r
个可能的终端状态,其中只有岩石存活,我们想要计算这些的总和,这给出了只有岩石到达终端状态的概率。
实际执行计算的方法是构建维度r*s*p
的3d数组,并从dp[r][s][p]=1
开始填充它(因为这是问题的初始状态)。然后继续计算dp[r-1][s][p]
,dp[r][s-1][p]
和dp[r][s][p-1]
,因为这些是三种可能的转换。然后递归每个案例,直到达到dp[0][0][0]
,然后输出dp[i][0][0]
的总和。
答案 1 :(得分:0)
你过分思考......
dp[r][s][p]
意味着唯一的一件事:
岛上存在“r
岩石和 s
剪刀 AND p
文件的可能性”。< / p>
这意味着当其中两个为0时,例如dp [0] [0] [x]表示“现在只有x
篇论文存活,其他两个物种已灭绝!”