zoukankan      html  css  js  c++  java
  • BZOJ4832: [Lydsy2017年4月月赛]抵制克苏恩

    传送门

    题目大意:

    攻击k次,每次可攻击随从或英雄。

    随从数不大于7个,且1滴血的a个,2滴b个,3滴c个。

    攻击一次血-1,如果随从没死可以生成3滴血随从一个

    题解:

    概率/期望dp

    f[i][j][p][q]表示攻击i次,一滴血的有j个,二滴血的有p个,三滴血的有q个。

    转移就是枚举打在谁身上

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int t,a,b,c,k;
    
    double f[55][8][8][8]; 
    
    int main(){
        scanf("%d",&t);
        f[i][j][p][q]//攻击了i次,一滴血的j个,二滴血的p个,三滴血的q个 
        while(t--){
            scanf("%d%d%d%d",&k,&a,&b,&c);
            memset(f,0,sizeof(f));
            f[0][a][b][c]=1.;
            double ans=0.;
            for(int i=0;i<k;i++){
                for(int j=0;j<=7;j++){
                    for(int p=0;p<=7;p++){
                        for(int q=0;q<=7;q++){
                            if(j+p+q>7)break;
                            f[i+1][j][p][q]+=f[i][j][p][q]/(j+p+q+1);
                            ans+=f[i][j][p][q]/(j+p+q+1);
                            if(j+p+q==7){
                                if(j)f[i+1][j-1][p][q]+=f[i][j][p][q]*j/(j+p+q+1);  
                                if(p)f[i+1][j+1][p-1][q]+=f[i][j][p][q]*p/(j+p+q+1);//攻击二滴血的,二滴血的-1,一滴血的+1 
                                if(q)f[i+1][j][p+1][q-1]+=f[i][j][p][q]*q/(j+p+q+1);
                            }else{
                                if(j)f[i+1][j-1][p][q]+=f[i][j][p][q]*j/(j+p+q+1);
                                if(p)f[i+1][j+1][p-1][q+1]+=f[i][j][p][q]*p/(j+p+q+1);
                                if(q)f[i+1][j][p+1][q]+=f[i][j][p][q]*q/(j+p+q+1);//攻击三滴血的-1,二滴血+1,三滴血+1 
                            }
                        }
                    }
                }
            }
            printf("%.2f
    ",ans);
        }
        return 0;
    }
    AC
  • 相关阅读:
    1.shell编程-变量的高级用法
    1.python简介
    1.numpy的用法
    1.MySQL(一)
    1.HTML
    1.Go-copy函数、sort排序、双向链表、list操作和双向循环链表
    1.Flask URL和视图
    1.Django自学课堂
    1.Django安装与运行
    ajax跨站请求伪造
  • 原文地址:https://www.cnblogs.com/zzyh/p/7799496.html
Copyright © 2011-2022 走看看