社区讨论

AC 40 RE 60,40pts 求调

P2473[SCOI2008] 奖励关参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mmbnzc6a
此快照首次捕获于
2026/03/04 14:37
6 天前
此快照最后确认于
2026/03/07 10:05
3 天前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N=20,S=1<<17|1;
int k,n,p[N],s[N];
double dp[N][S];
int main(){
    scanf("%d%d",&k,&n);
    for(int i=1,x;i<=n;++i){
        scanf("%d",p+i);
        while(scanf("%d",&x),x) s[i]|=(1<<x-1);
    }
    for(int i=k;i>=1;--i){
        for(int j=0;j<(1<<n);++j){
            for(int k=1;k<=n;++k){
                if((j&s[k])==s[k]){
                    dp[i][j]+=max(dp[i+1][j],dp[i+1][j|1<<k-1]+p[k]);
                }
                else dp[i][j]+=dp[i+1][j];
            }
            dp[i][j]/=n;
        }
    }
    printf("%.6lf",dp[1][0]);
    return 0;
}
/*
1 2
1 0
2 0
1.500000

6 6
12 2 3 4 5 0
15 5 0
-2 2 4 5 0
-11 2 5 0
5 0
1 2 4 5 0
10.023470
*/

回复

3 条回复,欢迎继续交流。

正在加载回复...