zoukankan      html  css  js  c++  java
  • #深搜,期望#CF105B Dark Assembly

    洛谷题目传送门

    CODEFORCES传送门


    分析

    题目强调贿赂要在投票开始前完成说明分糖和成功率可以分开计算

    那么分糖考虑直接暴搜,由于题目并没有说糖必须全部分完,

    所以每一次分完一颗糖后均要求当前状态下的成功率

    那成功率怎么求呢,考虑暴搜每个议员是否赞同或反对,

    当赞同人数超过一半时,成功率为当前概率,否则要乘上 (frac{A}{A+B})

    这样按照题目要求算出成功率,最后取最大值


    代码

    #include <cstdio>
    #define rr register
    using namespace std;
    int n,mid,A,a[11],b[11],k; double ans;
    inline void ev(int dep,int cnt,double pro,int deny,double &sum){
    	if (!pro) return;
    	if (dep==n){
    		if (cnt>=mid) sum+=pro;
    		else sum+=pro*A/(A+deny);
    		return;
    	}
    	ev(dep+1,cnt+1,pro*a[dep+1]/10.0,deny,sum);
    	ev(dep+1,cnt,pro-pro*a[dep+1]/10.0,deny+b[dep+1],sum);
    }
    inline void dfs(int dep,int swe){
    	rr double sum=0;
    	ev(0,0,1,0,sum);
    	ans=ans>sum?ans:sum;
    	if (dep==n||!swe) return;
    	for (rr int i=0;i<=swe;++i)
    	if (a[dep+1]+i<=10)
    		a[dep+1]+=i,dfs(dep+1,swe-i),a[dep+1]-=i;
    }
    signed main(){
    	scanf("%d%d%d",&n,&k,&A); mid=n/2+1;
    	for (rr int i=1;i<=n;++i) scanf("%d%d",&b[i],&a[i]),a[i]/=10;
    	dfs(0,k); return !printf("%lf",ans);
    }
    
  • 相关阅读:
    磁盘
    磁盘接口
    Linux help websites
    [SOJ] 1282. Computer games (KMP)
    [SOJ]1753 解码
    hdu 3473 裸的划分树
    hdu 4417 划分树
    hdu 4665 搜索
    hdu 4340 树状DP
    hdu 4005 边连通度与缩点
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/13859874.html
Copyright © 2011-2022 走看看