[DP!]UESTC 890

来源:互联网 发布:传感器java 编辑:程序博客网 时间:2024/05/16 07:30

这个题做的实在有点恶心

没有好好的理解掉

解题思路基本就是从你到的位置从后往前推

看看能到1-10个位置的概率

再求和/10即可

还有个问题就是ASCII码没有10!!

#include<bits/stdc++.h>using namespace std;double dp[1500];int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        memset(dp,0.0,sizeof(dp));        int cur=m; //printf("1:::%d\n",cur);        getchar();        for(int i=1;i<=n;i++)        {            dp[cur]=1;char x[3];            scanf("%s",x);            if(x[0]>='2'&&x[0]<='9'||x[0]=='10') cur+=(x[0]-'0');            else if(x[0]=='A') cur+=11;            else cur+=10;//            printf("1:::%d  \n",cur);        }        double ans=0;        for(int i=cur;i>=1;i--)        {            if(dp[i]==0){                for(int j=2;j<=11;j++)            {                int t=(j==10?4:1);                dp[i]+=dp[i+j]*t;            }dp[i]/=13;}            if(i<=10) ans+=dp[i];        }        printf("%.14lf\n",ans/10);    }    return 0;}/*5 22 3 5 3 Q250.487137781 1A120.100000001 2A130.100000001 10A210.174892346 12 2 2 2 2 2130.583071327 12 2 2 2 2 2150.627922963 1010 J K*/


0 0