HDU 4191

原创 2013年12月05日 18:52:28

题意:一场网球比赛,告诉你你能赢得一分的概率,输出赢得一局,一轮,和一场的比赛的概率,规则和正式比赛一模一样。

正常情况:dp[i][j] = p*dp[i+1][j] + (1 - p) * dp[i][j+1];

对于可能一直打的情况: dp[i][i] = p * p / (1 - p * (1 - p) * 2);

三次dp 都利用上次的计算结果

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define DB double
using namespace std;

const int MAXN = 20;
DB dp[MAXN][MAXN];
void init(){
    for(int i = 0;i <= 10; i++)
        for(int j = 0; j <= 10; j++)
            dp[i][j] = 0.0;
}
int main()
{
 //   freopen("test.txt","r",stdin);
    DB p;
    while(scanf("%lf",&p) != EOF){
        if(p == -1.0) break;
        init();
        for(int i = 0; i < 3; i++) dp[4][i] = 1.0;
        dp[3][3] = p * p / (1 - p * (1 - p) * 2);
        for(int i = 3; i >= 0; i--)
            for(int j = 3; j >= 0;j--){
                if(i == 3 && j == 3) continue;
                dp[i][j] = p * dp[i+1][j] + (1 - p) * dp[i][j + 1];
            }
        DB gp = dp[0][0];
        init();
        for(int i = 0; i < 6; i++) dp[7][i] = 1.0;
        dp[6][6] = p * p / (1 - p * (1 - p) * 2);
        for(int i = 6; i >= 0; i--)
            for(int j = 6; j >= 0;j--){
                if(i == 6 && j == 6) continue;
                dp[i][j] = p * dp[i+1][j] + (1 - p) * dp[i][j + 1];
            }
        DB p7 = dp[0][0];
    //    cout<<"p7:"<<p7<<endl;
        init();
        dp[6][6] = p7;
        dp[6][5] = gp + (1.0 - gp) * dp[6][6];
        dp[5][6] = gp * dp[6][6];
        for(int i = 0; i <= 4;i++) dp[6][i] = 1.0;
        for(int i = 5; i >= 0; i--)
            for(int j = 5;j >= 0;j--){
         //       DB p1,p2;
                dp[i][j] = gp * dp[i+1][j] + (1.0 - gp) * dp[i][j+1];
            //    if(i + 1 >= j + 2 && i + 1 >= 6) p1 = 1.0;
           //     else if(i + 3 <= j && j <= 6) p1 = 0.0;
          //      else p1 = dp[i+1][j];

           //     if(i  >= j + 3 && i >= 6) p2 = 1.0;
           //     else if(i + 2 <= j + 1 && j + 1 >= 6) p2 = 0.0;
           //     else p2 = dp[i][j+1];
           //     dp[i][j] = gp * p1 + (1.0 - gp) * p2;
            }
        DB sp = dp[0][0];
        init();
        for(int i = 0; i < 2; i++) dp[2][i] = 1.0;
        for(int i = 1; i >= 0; i--)
            for(int j = 1; j >= 0; j--){
                dp[i][j] = dp[i+1][j] * sp + dp[i][j+1] * (1.0 - sp);
            }
        DB mp = dp[0][0];
        printf("%.11f %.11f %.11f\n",gp,sp,mp);
    }
    return 0;
}


spoj 4191. Sky Code(容斥)

http://www.spoj.com/problems/MSKYCODE/ 给出一个集合,含有n个元素,每次任意从中取出4个使得他们的gcd是1,问有多少种取法。 可以先考虑...
  • u013081425
  • u013081425
  • 2014年10月31日 14:30
  • 1091

SPOJ-New Distinct Substrings,注意会爆int

SUBST1 - New Distinct Substrings    和上一题题意一样,只是数据范围有所改动,50000。    思路还是和上一题一样,所有字串数(len+1)*len/2。...
  • NYIST_TC_LYQ
  • NYIST_TC_LYQ
  • 2017年02月20日 16:43
  • 404

NKOJ 4191 Trie (状压dp)

P4191中山纪念中学 Trie问题描述 字母(Trie)树是一个表示一个字符串集合中所有字符串的前缀的数据结构,其有如下特征: 1.树的每一条边表示字母表中的一个字母 2.树根...
  • Mogician_Evian
  • Mogician_Evian
  • 2017年10月14日 09:34
  • 108

ZSTUOJ 4191 无向图找环(dfs)

中文题 直接dfs下去即可,遇到重复访问的点,判断一下该环三部分异或和是否大于0 代码: #include #include #include using namespace std; ...
  • u011217342
  • u011217342
  • 2015年04月02日 18:52
  • 960

hdu6030 (矩阵快速幂)

这道题让我深深感到了线性代数的重要性啊,递推关系式不是随便搞搞就能出来的! 如果用a表示红色,用b表示蓝色。题意明显可以看出只需要管长度2和3的连续序列是否符合! 如果以b结尾,那么下一个必须是a,或...
  • nucshiyilang
  • nucshiyilang
  • 2017年05月08日 11:59
  • 305

hdu 5178 二分查找

原文链接 源代码1: #include #include #include using namespace std; int main() { long long int i,j,k,l...
  • u014265347
  • u014265347
  • 2015年05月09日 23:37
  • 565

Courses HDU1083(二分图的匹配)

题目http://acm.hdu.edu.cn/showproblem.php?pid=1083 描述:有p门的课,每门课都有若干学生,现在要为每个课程分配一名课代表,每个学生只能担任一门课的课...
  • deqingguo
  • deqingguo
  • 2011年10月26日 15:21
  • 2589

HDU2602/HDU1114/HDU2191(重新整理一下01背包,完全背包,多重背包)

好长时间不做背包的问题,有一点遗忘,现在把这些问题整理一下~ 一.01背包(HDU2602) 题目:http://acm.hdu.edu.cn/showproblem.php?pid=2602 题意就...
  • riba2534
  • riba2534
  • 2017年01月11日 13:24
  • 1095

HDU 1220 Cube (组合数学)

Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016年07月19日 14:19
  • 546

hdu5444 Elven Postman(二叉树遍历)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5444 题目大意:给出一颗二叉树的先序遍历,默认的中序遍历是1.、2、……n。给出q个询问,询...
  • aaaaacmer
  • aaaaacmer
  • 2015年09月14日 17:00
  • 1319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 4191
举报原因:
原因补充:

(最多只允许输入30个字)