概率DP 2017 ICPC 乌鲁木齐 A Coins

题目链接:https://nanti.jisuanke.com/t/40512

题意:n个硬币,初始全是反面朝上,抛m次,每次抛k个,求最好情况硬币向上个数的期望

一个比较好的概率DP的总结:https://blog.csdn.net/myjs999/article/details/81022546

分析:很明显当硬币反面朝上次数大于k,直接抛这些,小于k时,这些反面朝上全部取的,不够的加正面朝上的,dp[i][j]表示抛i次后正面朝上有j个的概率,枚举每次抛的硬币里面正面朝上有t个,状态转移方程就是dp[i+1]]j+t]=dp[i][j]*(1/2)^k*Ctk(t个里面选k个正面朝上的)

#include <bits/stdc++.h>
using namespace std;
const int maxn=110;
const long long mod=1e9+7;
const int inf=1<<30;
typedef long long ll;
double dp[210][210];
//dp[i][j]即为抛了i次后,有j枚硬币正面朝上的概率
//这里开大点,后面就可以不用判断第二维加上k之后会超100的问题
double p[110];//p数组存放的是1/2的幂次
double c[110][110]; //c数组是求组合数的,别的方法都涉及到取模
int main(){
    c[0][0]=1;
    for(int i=1;i<=100;i++)
    {
        c[i][0]=1;
        for(int j=1;j<=i;j++)c[i][j]=c[i-1][j-1]+c[i-1][j];//这个方法求组合数的方法是用到了杨辉三角,高中学的二项式定理
    }
    p[0]=1;
    for(int i=1;i<=100;i++)p[i]=p[i-1]/2;
     int t;cin>>t;
    for(int T=1;T<=t;T++){
        memset(dp,0,sizeof(dp));
        int n,m,t;scanf("%d%d%d",&n,&m,&t);
        dp[0][0]=1;
        for(int i=0;i<m;i++){
            for(int j=0;j<=n;j++){
                if(dp[i][j]==0)continue;//小优化,如果dp[i][j]是0的话,转移来的也都是0,直接不用考虑
                for(int k=0;k<=t;k++){
                    //反面朝上的硬币数目不大于每次要抛的数目的话,这次就全抛反面朝上的
                    if(n-j>=t)dp[i+1][j+k]+=dp[i][j]*p[t]*c[t][k];
                    else dp[i+1][j+k-(t-(n-j))]+=dp[i][j]*p[t]*c[t][k];
                    //注意两个都是+=
                }
            }
        }
        double ans=0;
        for(int i=1;i<=n;i++){
            ans+=dp[m][i]*i;
            //cout<<dp[m][i]<<endl;
        }
        printf("%.3lf\n",ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/qingjiuling/p/11322059.html

时间: 2024-10-15 04:57:21

概率DP 2017 ICPC 乌鲁木齐 A Coins的相关文章

2017 ICPC乌鲁木齐 A Coins 概率dp

Coins 题意:一开始所有n个硬币都是反面朝上的,每次必须拿k个来抛,抛的人足够聪明,问m次之后向上的硬币的期望. 首先说了这个足够聪明的意思,就是只要向反面的有k个就不会sb地去拿向正面的来抛,想了一会之后就觉得是个概率dp的转移, 然而一开始想漏了个组合数的加权,但在+1的提醒下搞通了,但是分析了下,这是nmk的时间复杂度, 1e6还有个1e3的大T,emmm理论上会TLE的,但结果看网上题解,都是跟自己思路差不多,所以也是很迷. 嗯,转移过程其实很简单,dp[i][j]就是第i次抛了之后

欧拉公式 大组合数 2017 ICPC 乌鲁木齐 D Fence Building

题目链接:https://nanti.jisuanke.com/t/40515 题意:给你一个n,让你在圆上找n个点,最多能把圆分成多少个区域. 欧拉公式:R+V-E=2,其中的R,V,E分别是区域数,点数,边数 想分成最多的区域,只需要满足不会有3根线交于一个点就好. 尝试统计总的结点个数A(n),与独立线段(包括圆弧上的n段小弧)的总个数B(n),然后利用欧拉公式就可以得到答案 Ans(n)=B(n)−A(n)+1 这里之所以是加1是因为圆外那个区域我们不算任意四个点,会形成一个交点,并贡献

2017 ICPC Asia Urumqi A.coins (概率DP + 期望)

题目链接:Coins Description Alice and Bob are playing a simple game. They line up a row of nn identical coins, all with the heads facing down onto the table and the tails upward. For exactly mm times they select any kk of the coins and toss them into the

atcoderI - Coins ( 概率DP)

I - Coins Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Let NN be a positive odd number. There are NN coins, numbered 1,2,…,N1,2,…,N. For each ii (1≤i≤N1≤i≤N), when Coin ii is tossed, it comes up heads with probabi

HDU 5001 Walk 求从任意点出发任意走不经过某个点的概率 概率dp 2014 ACM/ICPC Asia Regional Anshan Online

题意: 给定n个点m条边的无向图 问: 从任意点出发任意走d步,从不经过某个点的概率 dp[i][j]表示从不经过i点的前提下,走了d步到达j点的概率. #include <iostream> #include <cstdio> #include <string.h> #include <queue> #include <vector> #include <algorithm> #include <set> using n

HDU5985 Lucky Coins 概率dp

题意:给你N种硬币,每种硬币有Si个,有Pi 概率朝上,每次抛所有硬币抛起,所有反面的拿掉,问每种硬币成为最后的lucky硬币的概率. 题解:都知道是概率dp,但是模拟赛时思路非常模糊,很纠结,dp[10][1e6]这个状态让我觉得丝毫没有用,当时一直以为每种硬币是互相独立的.然后中间吃了个饭,回来又想了很久很久,就是不想看题解,然后发现,这个dp和极限有关,同时状态跟走了几步有极大的关系.否则你初始值根本没法赋,那么显然我猜既然保留6位,肯定当数字小到一定程度时是可以忽略的,也就是进行的次数多

UVALive 6672 Bonus Cards 概率dp

题意呢 就是有两种售票方式 一种是icpc 一种是其他方式 icpc抢票成功的概率是其他方式的2倍…… 这时 一个人出现了 他通过内幕知道了两种抢票方式各有多少人 他想知道自己如果用icpc抢票成功的概率是多少 用acm抢票成功的概率是多少…… 做过不多的概率dp 还在摸索…… dp[i][j]代表第i轮有j个icpc的人已经有票了…… 当然同时i-j个通过其他方式抢票的人也有票了 这就是用同样的函数搜两次的原理…… 优化一次i<=a 一次是把初始化放到for里…… 第一次见这么卡时间的题……

HDU 4050 wolf5x(动态规划-概率DP)

wolf5x Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 402    Accepted Submission(s): 248 Special Judge Problem Description There are n grids in a row. The coordinates of grids are numbered fro

HDU 3076 ssworld VS DDD(概率dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3076 Problem Description One day, sssworld and DDD play games together, but there are some special rules in this games. They both have their own HP. Each round they dice respectively and get the points P