抵制克苏恩
内存限制:128 MiB 时间限制:1000 ms 标准输入输出
题目描述
输入格式
输出格式
样例
$瞎扯$
我记得我版本初痛下狠心和了一套克苏恩德,然后就被各种动物园等卡组掉打,然后我就和了一套动物园
克苏恩真是太慢了,启动慢,容易被很多卡组针对,事实上克苏恩比青玉德还慢
话说为什么对方有奴隶主自己还要下克苏恩,话说奴隶主什么时候退的环境
还有这个题非常符合原游戏,因为英雄可能有护甲所以期望可能大于30
$题解$
期望题,我们考虑倒着转移,
因为可能有三血,二血,一血奴隶主,我们想到f一定要包含这些
先不考虑随从超限
首先当你打三血奴隶主时,你三血奴隶主数量不变,多一个二血
打二血奴隶主,你三血奴隶主加一个,二血减一个,一血加一个
打一血,一血减一个
那么分开转移就完了
完了
#include<bits/stdc++.h> #define ll int #define A 52 using namespace std; ll t,a,b,c,k; double geshu=0,ans; double f[A][A][A][A]; void bfs() { for(ll i=1;i<=50;i++) for(ll a=0;a<=7;a++) for(ll b=0;a+b<=7;b++) for(ll c=0;a+b+c<=7;c++) { double p=1/(double(a)+double(b)+double(c)+double(1.0)); if(a) f[i][a][b][c]+=f[i-1][a-1][b][c]*a*p; if(b) f[i][a][b][c]+=f[i-1][a+1][b-1][a+b+c+1<=7?c+1:c]*b*p; if(c) f[i][a][b][c]+=f[i-1][a][b+1][a+b+c+1<=7?c:c-1]*c*p; f[i][a][b][c]+=(f[i-1][a][b][c]+1)*p; } } int main() { memset(f,0,sizeof(f)); bfs(); scanf("%d",&t); while(t--) { ans=0; scanf("%d%d%d%d",&k,&a,&b,&c); double a1=double(a),b1=double(b),c1=double(c),k1=double(k); printf("%.2lf ",f[k][a][b][c]); } }