UVA10529 Dumb Bones

UVA - 10529

Dumb Bones

题意:给定n,表示要放n个骨牌,每次放下骨牌,有可能向左倒的概率为pl,向右倒的概率为pr,如果倒下,会将那一侧的骨牌全部推倒,可以选择位置先后放骨牌,问说一种放骨牌次数最少的期望是多少。

/*
    设dp[i]表示放置连续的i个期望的步数。
    需要枚举放置的位置,即左边和右边有多少个,放置成功的期望步数为1/(1-pl-pr),如果放置失败了,那么就会是左边或右边的骨牌倒塌,此时重建的期望步数为dp[l]*pl+dp[r]*pr,所以可以得到转移方程:
    dp[i]=min(dp[l]+dp[r]+(dp[l]*pl+dp[r]*pr+1)/(1-pl-pr))
*/
#include<cstdio>
#include<cstring>
using namespace std;
int n;
double pl,pr,dp[1010];
inline double min(double x,double y){
    return x<y?x:y;
}
int main(){
    //freopen("Cola.txt","r",stdin);
    while(1){
        scanf("%d",&n);
        if(n==0)return 0;
        scanf("%lf%lf",&pl,&pr);
        dp[0]=0;dp[1]=1/(1-pl-pr);
        for(int i=2;i<=n;i++){
            dp[i]=0x3f3f3f3f;
            for(int j=0;j<i;j++){
                int l=j,r=i-j-1;
                dp[i]=min(dp[i],dp[l]+dp[r]+(dp[l]*pl+dp[r]*pr+1)/(1-pl-pr));
            }
        }
        printf("%.2lf\n",dp[n]);
    }
}
时间: 2024-10-15 12:00:15

UVA10529 Dumb Bones的相关文章

UVA10529 Dumb Bones (完成度:40%)

题目链接:https://vjudge.net/problem/UVA-10529 知识点: 概率与期望,DP. 题目大意: 现要放置 \(n\) 个多米诺骨牌,且每放置一块多米诺骨牌有 \(P_l\) 的概率向左倒,其左边相邻的骨牌也会随之倒下:有 \(P_r\) 的概率向右倒,其右边相邻的骨牌同上.问要放置 \(n\) 块相连的一排骨牌所需要的放置次数的最小期望是多少? \(1 \le n \le 100\) \(0 < P_l + P_r \le 0.5\) 解题思路: 我们用动态规划的方

UVA 10529 - Dumb Bones(概率+区间dp)

UVA 10529 - Dumb Bones 题目链接 题意:你试图把一些多米诺骨牌排成直线,然后推倒它们.但是如果你在放骨牌的时候不小心把刚放的骨牌碰倒了,它就会把相临的一串骨牌全都碰倒,而你的工作也被部分的破坏了. 比如你已经把骨牌摆成了DD__DxDDD_D的形状,而想要在x这个位置再放一块骨牌.它可能会把左边的一块骨牌或右边的三块骨牌碰倒,而你将不得不重新摆放这些骨牌. 这种失误是无法避免的,但是你可以应用一种特殊的放骨牌方法来使骨牌更多的向一个方向倒下. 给出你要摆放的骨牌数目,以及放

uva 10529 - Dumb Bones(概率+区间dp)

题目连接:uva 10529 - Dumb Bones 题目大意:给定n,表示要放n个骨牌,每次放下骨牌,有可能向左倒的概率为pl,向右倒的概率为pr,如果倒下,会将那一侧的骨牌全部推倒,可以选择位置先后放骨牌,问说一种放骨牌次数最少的期望是多少. 解题思路:dp[i]表示放i个骨牌需要的步数期望,维护一个最优放的位置,dp[i] = min\{ (从i-1到i的步数)} + (0到i-1的步数)} (从i-1到i的步数):dp[i?j?1]?pl+dp[j]?pr+11?pl?pr (0到i-

Dumb Bones(uva 10529)

题意:给定n,表示要放n个骨牌,每次放下骨牌,有可能向左倒的概率为pl,向右倒的概率为pr,如果倒下,会将那一侧的骨牌全部推倒,可以选择位置先后放骨牌,问说一种放骨牌次数最少的期望是多少. /* 设dp[i]表示放置连续的i个期望的步数. 需要枚举放置的位置,即左边和右边有多少个,放置成功的期望步数为1/(1-pl-pr),如果放置失败了,那么就会是左边或右边的骨牌倒塌,此时重建的期望步数为dp[l]*pl+dp[r]*pr,所以可以得到转移方程: dp[i]=min(dp[l]+dp[r]+(

UVA 10529 Dumb Bones

#include <iostream> #include <stdio.h> #include <cstring> #define MAX 1010 using namespace std; double pl,pr; double data[MAX]; void Init() { memset(data, 0, sizeof(data)); } double dp(int n) { double temp; int l,r; if(n==0) return 0; if

UVA 10529 Dumb Bones 概率dp 求期望

题目链接:点击打开链接 题意: 要在一条直线上摆多米诺骨牌. 输入n, l, r 要摆n张排,每次摆下去向左倒的概率是l, 向右倒的概率是r 可以采取最优策略,即可以中间放一段,然后左右两边放一段等,摆放顺序任意. 问:在最佳策略下要摆成n张牌的期望次数. 思路: 点击打开链接 #include <cstdio> #include <iostream> #include <cstring> #include <queue> #include <algo

UVA 10529 - Dumb Bones (概率dp)

题目描述 You are trying to set up a straight line of dominos, standing on end, to be pushed over later for your entertainment. (Sure, it seems pointless to set something up only to knock it down again, but you have some strange hobbies) The tricky thing

#11 UVA 10529 Dumb Bones

题意: 放一堆排,每放一张,有pa的概率让左边的全倒,有pb的概率让右边全倒 问在最优策略下,最少要放几张才能摆放出n张 1<=n<=1000 题解: 这题应该还是很经典的 首先是期望部分 我们通过枚举最后一步,来分割序列 很容易知道中间的点应该要放1/(1-pa-pb)次 那么左边倒的次数就是pa/(1-pa-pb)次 这样dp方程就很简单了 dp[i]=min((dp[ls]*pa+dp[rs]*pb)/(1-pa-pb)+dp[ls]+dp[rs]) 发现朴素的是n^2的 性质1: 单峰

《算法竞赛入门经典——训练指南》第二章题库

UVa特别题库 UVa网站专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=442 注意,下面注有"extra"的习题并没有在书中出现,但在上面的特别题库中有,属于附加习题. 基础练习 (Basic Problems) UVa11388 GCD LCM UVa11889 Benefit UVa10943 How do y