社区讨论
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 条回复,欢迎继续交流。
正在加载回复...