这个题做的实在有点恶心
没有好好的理解掉
解题思路基本就是从你到的位置从后往前推
看看能到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 2
2 3 5 3 Q
25
0.48713778
1 1
A
12
0.10000000
1 2
A
13
0.10000000
1 10
A
21
0.17489234
6 1
2 2 2 2 2 2
13
0.58307132
7 1
2 2 2 2 2 2
15
0.62792296
3 10
10 J K
*/