CF97C Winning Strategy

CF97C Winning Strategy


洛咕(题意应该快传上去了)

这题好玄学鸭。。。都不知道为啥是对的

(f[i][j])表示打了i轮比赛,有j个参加了一次的人,直接枚举有几个参加了转移过去即可

#include<bits/stdc++.h>
#define il inline
#define vd void
#define ll long long
il int gi(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    return x*f;
}
double p[101];
double f[2][20001];
int main(){
    int n=gi();double ans=0;
    for(int i=0;i<=n;++i)scanf("%lf",&p[i]);
    int now=0;
    memset(f[now],-63,sizeof f[now]);
    f[now][0]=0;
    for(int i=0;i<=200;++i){
        memset(f[now^1],-63,sizeof f[now^1]);
        for(int j=0;j<=(i?20000:0);++j){
            if(i)ans=std::max(ans,f[now][j]/i);
            for(int k=0;k<=n;++k)
                if(j+n-k-k>=0&&j+n-k-k<=20000){
                    f[now^1][j+n-k-k]=std::max(f[now^1][j+n-k-k],f[now][j]+p[k]);
                }
        }
        now^=1;
    }
    printf("%.10lf
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/xzz_233/p/9762705.html