单人纸牌_NOI导刊2011提高(04)

本文介绍了一个单人纸牌游戏的胜利概率计算问题。游戏共有36张牌,分为9叠,目标是在所有可能的选择中计算出玩家按照特定策略获胜的概率。通过动态规划算法实现了这一计算。

单人纸牌

时间限制: 1 Sec  内存限制: 128 MB

题目描述

单人纸牌游戏,共 36 张牌分成 9 叠,每叠 4 张牌面向上。每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如黑桃 10 和梅花 10)并且一起拿走。如果最后所有纸牌都被取走,则游戏者就赢了,否则游戏者就输了。
George 很热衷于玩这个游戏,但是一旦有时有多种选择的方法,George 就不知道取哪一种好了,George 会从中随机地选择一种走,例如:顶上的 9 张牌为 KS, KH, KD, 9H,8S, 8D, 7C, 7D,6H,显然有 5 种取法:(KS, KH), (KS, KD), (KH, KD), (8S,8D), (7C, 7D),当然 George 取到每一种取法的概率都是 1/5。
有一次,George 的朋友 Andrew 告诉他,这样做是很愚蠢的,不过 George 不相信,他认为如此玩最后成功的概率是非常大的。请写一个程序帮助 George 证明他的结论:计算按照他的策略,最后胜利的概率。

 

输入

9 行每行 4 组用空格分开的字串,每个字串两个字符,分别表示牌面和花色,按照从堆底到堆顶的顺序给出。

 

输出

一行,最后胜利的概率,精确到小数点后 3 位。

 

样例输入

AS 9S 6C KS
JC QH AC KH
7S QD JD KD
QS TS JS 9H
6D TD AD 8S
QC TH KC 8D
8C 9D TC 7C
9C 7H JH 7D
8H 6S AH 6H

样例输出

0.589
题解:
注意“按照从堆底到堆顶的顺序给出”,所以输入的数应该先反过来DP
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
using namespace std;
double f[5][5][5][5][5][5][5][5][5];
int j[10],s[10];
char a[11][5];
int main()
{
    int i,k;
    for(i=1; i<=9; i++)
    {
        char s[15];
        gets(s+1);
        a[i][1]=s[10];
        a[i][2]=s[7];
        a[i][3]=s[4];
        a[i][4]=s[1];
    }
    f[0][0][0][0][0][0][0][0][0]=1;
    for(j[1]=0; j[1]<=4; j[1]++)
    {
        for(j[2]=0; j[2]<=4; j[2]++)
        {
            for(j[3]=0; j[3]<=4; j[3]++)
            {
                for(j[4]=0; j[4]<=4; j[4]++)
                {
                    for(j[5]=0; j[5]<=4; j[5]++)
                    {
                        for(j[6]=0; j[6]<=4; j[6]++)
                        {
                            for(j[7]=0; j[7]<=4; j[7]++)
                            {
                                for(j[8]=0; j[8]<=4; j[8]++)
                                {
                                    for(j[9]=0; j[9]<=4; j[9]++)
                                    {
                                        if(f[j[1]][j[2]][j[3]][j[4]][j[5]][j[6]][j[7]][j[8]][j[9]]!=0)
                                        {
                                            double cnt=0;
                                            for(i=1; i<=9; i++)
                                                for(k=i+1; k<=9; k++)
                                                    if(j[i]+1<=4&&j[k]+1<=4&&a[i][j[i]+1]==a[k][j[k]+1])cnt++;
                                            if(cnt==0)continue;
                                            for(i=1; i<=9; i++)
                                            {
                                                for(k=i+1; k<=9; k++)
                                                {
                                                    if(j[i]+1<=4&&j[k]+1<=4&&a[i][j[i]+1]==a[k][j[k]+1])
                                                    {
                                                        s[i]++;s[k]++;
                                                        f[j[1]+s[1]][j[2]+s[2]][j[3]+s[3]][j[4]+s[4]][j[5]+s[5]][j[6]+s[6]][j[7]+s[7]][j[8]+s[8]][j[9]+s[9]]+=f[j[1]][j[2]][j[3]][j[4]][j[5]][j[6]][j[7]][j[8]][j[9]]/cnt;
                                                        s[i]--;s[k]--;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    printf("%.3lf",f[4][4][4][4][4][4][4][4][4]);
    return 0;
}

 

转载于:https://www.cnblogs.com/huangdalaofighting/p/7059049.html

## 01、数据介绍 数据整理全国30个省份制造业细分行业产值,能够反映一定时期内细分行业工业生产总规模和总水平的指标,是计算工业生产发展速度和主要比例关系、计算工业产品销售率等其他经济指标的基础。先进制造业数据可用于两业融合测算。 数据名称:全国30省-制造业细分行业产值/先进制造业细分行业产值数据 数据年份:2001-2022年 ## 02、数据指标 农副食品加工业;食品制造业;饮料制造业;烟草制造业;纺织业;纺织服装鞋帽制造业;皮革、毛皮、羽毛(绒)极其制品业;木材加工及木、竹、藤、棕、草制品业;家具制造业;造纸及纸制品业;印刷业和记录媒介的复制;文教体育用品制造业;石油加工、炼焦及核燃料加工业化;学原料及化学制品制造业;医药制造业;化学纤维制造业;橡胶和塑料制品制品业;非金属矿物制品业;黑色金属冶炼及压延加工业;有色金属冶炼及压延加工业;金属制品业;通用设备制造业;专用设备制造业;汽车制造业;其他运输设备制造业;电气机械及器材制造业;通信设备计算机及其他电子设备制造业;仪器仪表及文化、办公用机械制造业;其他制造业;废弃资源和废旧材料回收加工业;制造业总产值 印刷业和记录媒介的复制;石油加工、炼焦及核燃料加工业;化学原料及化学制品制造业;医药制造业;橡胶和塑料制品制品业;非金属矿物制品业;黑色金属冶炼及压延加工业;有色金属冶炼及压延加工业;金属制品业;通用设备制造业;专用设备制造业;汽车制造业;其他运输设备制造业;电气机械及器材制造业;通信设备计算机及其他电子设备制造业;仪器仪表及文化、办公用机械制造业;废弃资源和废旧材料回收加工业
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值