HDU 3366 Passage (dp)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情


题意:n条通道和m百万元,每一条通道有三种情况,一是直接出去,概率是p,二是碰上士兵,给1百万块再回去,概率是q,或者是死路,概率是1-p-q。问最终出去时最优可能性。

思路:概率dp,既然问最优可能性,肯定是最有可能跑出去的情况最好了,就算跑不出去也要少碰士兵,所以先按p/q从大到小排序,然后dp[i][j]代表在第i个通道,还有j万元的时候能出去的概率。

能直接出去的话,最终结果加上dp[i][j]*p;如果碰上士兵就dp[i+1][j-1]+=dp[i][j]*q;如果是死路,就dp[i+1][j]+=dp[i][j]*(1-p-q);

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<deque>
#include<functional>
#include<iterator>
#include<vector>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<sstream>
#define CPY(A, B) memcpy(A, B, sizeof(A))
typedef long long LL;
typedef unsigned long long uLL;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const double EPS = 1e-9;
const double OO = 1e20;
const double PI = acos (-1.0);
int dx[]= {0,1,1,1,0,-1,-1,-1};
int dy[]= {1,1,0,-1,-1,-1,0,1};
int gcd (const LL &a, const LL &b) {return b==0?a:gcd (b,a%b);}
using namespace std;
double dp[1010][11];//小心double
struct node {
    double p,q;
    bool operator < (const node &a) const {
        return p/q>a.p/a.q;
    }
} num[1010];
int main() {
    int T,cas=1; scanf ("%d",&T);
    while (T--) {
        int n,m; scanf ("%d%d",&n,&m);
        for (int i = 0; i < n; i++) {
            scanf ("%lf%lf",&num[i].p,&num[i].q);
        }
        sort (num,num+n);
        double ans=0.0;
        memset (dp,0,sizeof (dp) );
        dp[0][m]=1.0;
        for (int i=0; i<n; i++) {
            for (int j=m; j>=0; j--) {
                ans+=num[i].p*dp[i][j];
                if (j>=1) {dp[i+1][j-1]+=dp[i][j]*num[i].q;}
                dp[i+1][j]+=dp[i][j]* (1-num[i].q-num[i].p);
            }
        }
        printf ("Case %d: %.5f\n",cas++,ans);
    }
    return 0;
}


HDU 3366 Passage(概率DP) 题意:有n条通道,M百万美元,每条通道成功逃生的几率是pi,被捉住的可能性是qi,走进死胡同的可能性是(1-pi-qi)。如果被捉住需要支付一百万美元然 后回到原地,否则就要被杀死;走进死胡同是不需支付金钱但也得回到原地。问在选择最优方式的前提下成功逃生的几率。 分析:定义了二维数组dp[i][j]表示选择第i条通道还剩j百万美元的几率,我在推时用的汇聚型的思路,即判断什么情况可以走到dp[i 阅读详情

相关推荐

HDU3366 Passage(等概率模型+贪心dp)

HDU传送门 网上所有题解都是直接说排序…也是醉了 假设资金无限,那么每一种选择道路的方式逃生的概率都是一样的 因为不会死,这个可以手推一下. 那么考虑资金很少,少到死一次就game overgame\ overgame over 令两扇门分别为pi,qi,pj,qjp_i,q_i,p_j,q_jpi​,qi​,pj​,qj​ 若先选iii再选jjj逃生的概率大于先选jjj再选iii pi+(1−pi−qi)∗pj>pj+(1−pj−qj)∗pip_i+(1-p_i-q_i)*p_

jziwjxjd的博客 623

Passage(HDU3366)

题意有一个百万富翁被困在城堡里,有n个走廊通向外面。这n个走廊有两个属性值p[i],q[i] 分别表示在这条走廊成功走出去的几率和遇见士兵的几率,如果遇见士兵的话,就需要给他1万元,然后返回承包,还有(1-p[i]-q[i])的几率走廊是个死胡同,不能出去,然后就会走回城堡。 现在已知这个百万富翁携带有m万元,求逃出的概率。分析首先发现这个富翁一定会贪心的走走廊。具体怎么贪心呢。就是走成功逃出几率

Umbrella__的博客 514

HDU-3366-Count the string(KMP,DP

Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14368 Accepted Submission(s): 6572 Problem Description It is well known that Aekdy...

weixin_30409849的博客 153

Hdu 3366 Passage (概率DP

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3366 思路:如果已知行走顺序,则可通过DP求解。要使得选择最优,则应按p/q从大到小的顺序选择(遇到士兵的几率越小,出去几率越大的路应首先考虑)。 d[i][j]表示在第i条路,还有j的钱能够出去的概率,则若能直接出去ans+=[i][j]*p[i],若遇到士兵d[i+1][j-1]+=d[i][

哆啦AC梦的博客 1380

HDU 3366 Passage (概率DP

Passage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 411    Accepted Submission(s): 192 Problem Description Bill is a millionaire. B

Interstellar_的博客 1924

PassageHDU-3366 ) 概率DP

Bill is a millionaire. But unfortunately he was trapped in a castle. There are only n passages to go out. For any passage i (1<=i<=n), Pi (0<=Pi<=1) denotes the probability that Bill will ...

菜鸡的博客 300

HDU 3366 Passage (概率DP

HDU 3366 Passage (概率DP) 题目大意: T组测试数据,一个人困在了城堡中,有n个通道,m百万money ,每个通道能直接逃出去的概率为 P[i] ,遇到士兵的概率为 q[i],遇到士兵得给1百万money,否则会被杀掉,还有 1-p[i]-q[i] 的概率走不通,要回头。问在可以选择的情况下,逃出去的概率是多少? 解题思路: 首先,n个通道要选择哪个先走哪个后走呢?如果暴力是2^n,显然不可取。只需要贪心,选择逃生概率最大的通道,也就是 p[i]/q[i]最大的优先。 用 dp[i]

炒饭君的博客 2110

HDU 3366 Passage 概率dp

Passage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 538    Accepted Submission(s): 269 Problem Description Bill is a millionair

zhj_fly的博客 529

hdu-3366 Passage 概率DP 读懂就能AC hhh

http://acm.split.hdu.edu.cn/showproblem.php?pid=3366 读题的时候没发现这个P Q 1-P-Q是全集的划分,以为是独立事件,写错了转移方程233 先贪心得排个序,排序规则我们可以通过假设A B/B A这两种顺序,然后推导概率和的大小关系来得出。 然后分别讨论直接通过,免费到下一门,付费到下一门。 dp[i][j]存到达i门消费j的概率,d...

weixin_30588729的博客 142

概率与期望DP小结。

  好久没更新博客,来水一蛤,近三天做了二十道概率题,也算是摸到了一点门道。 首先关于一个很多博主的说到的点,也是我个人认为很重要的一个点,就是概率要顺着推,期望倒着推,我比较赞同以下这篇博客的观点:https://blog.csdn.net/nameofcsdn/article/details/52082746 其次就是关于概率DP状态的设计,概率DP的题往往设计状态比较直观,直接按照题意来...

hyesuixin的博客 1280

【概率与期望】hdu 3366 Passage

通道:http://acm.hdu.edu.cn/showproblem.php?pid=3366 题意:有N条道路可以走出去,一条道路既没有碰到土匪也没有碰到死胡同从而走出的概率是Pi;碰到土匪而没有走出去的概率的概率为Qi( 0< = Qi < = 1-Pi),如果碰到土匪,那么必须得付1块钱并且还得返回;这条路是死胡同的概率是1-Pi-Qi,若是死胡同则必须返回。这个...

132

概率DP hdu 3366

题意:一个人被困在一个城堡里,面前有n条路,他自己有m百万元,选择每一条路都有p概率通过,q概率遇到士兵,1-p-q概率道路不通;遇到士兵的话需要上交1百万,如果不够钱,则被杀死,问的是最优情况下多少概率可以成功逃脱 思路是首先处理一下数据,想要最优肯定是在不被杀死的情况下越早走出越好,那就要求尽量不要碰到士兵,所以应该先对数据按照p/q排序一下,这样可以保证不死的概率最大,然后通过概...

aog06440的博客 110

2014 Super Training #1 F Passage 概率DP

原题: HDU 3366 http://acm.hdu.edu.cn/showproblem.php?pid=3366 本来用贪心去做,怎么都WA,后来看网上原来是一个DP题。 首先按P/Q来做排序,即P越大,Q越小就越好,这样可以确保先选最优的路走。 dp[i][j]表示已经到了第i条路(说明前i-1条都没成功的情况),还剩j块钱时能够走出去的概率。 则方程: dp[i]...

weixin_30410999的博客 157

HDU 3366

Problem Description Bill is a millionaire. But unfortunately he was trapped in a castle. There are only n passages to go out. For any passage i (1<=i<=n), Pi (0<=Pi<=1) denotes the probability that

zjbh89757的专栏 609
上一篇: HDU 4593 Robot
下一篇: HDU 4594 Script Z
Kim0403
博客等级 码龄12年 25粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值