Codeforces Beta Round #16 (Div. 2 Only) E. Fish
2014-08-24 16:29
267 查看
明显的概率dp
用st表示当前鱼的一个集合,dp[st]为由初始状态产生st集合的概率。一开始 dp[(1<<n)-1]=1,按照st中1的个数从高到低的顺序去dp,对于每个状态,枚举删除的那条鱼,计算出删除那条鱼的概率:选出那条鱼的概率乘上那条鱼被吃掉的概率。这样就就可以得到一个新的nst,且nst中1的个数比st中的少1.
用st表示当前鱼的一个集合,dp[st]为由初始状态产生st集合的概率。一开始 dp[(1<<n)-1]=1,按照st中1的个数从高到低的顺序去dp,对于每个状态,枚举删除的那条鱼,计算出删除那条鱼的概率:选出那条鱼的概率乘上那条鱼被吃掉的概率。这样就就可以得到一个新的nst,且nst中1的个数比st中的少1.
#include <bits/stdc++.h> #define maxn 20 #define maxm 100009 #define MOD 1000000007 using namespace std; double a[maxn][maxn],dp[1<<18],P[1<<18][18]; bool vis[1<<18]; int n; int bitcount[1<<18],pw[1<<18]; vector<int>G[20]; int main() { scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%lf",&a[i][j]); for(int i=0;i<1<<n;i++) { for(int j=0;j<n;j++) { if(i&(1<<j)) bitcount[i]++; } G[bitcount[i]].push_back(i); } for(int i=0;i<n;i++) pw[(1<<i)]=i; for(int i=0;i<(1<<n);i++) { for(int j=0;j<n;j++) { if(i&(1<<j)) { for(int k=0;k<n;k++) { if(i&(1<<k)) { P[i][j]+=a[k][j]; } } } } } dp[(1<<n)-1]=1; for(int i=n;i>=2;i--) { for(int j=0;j<(int)G[i].size();j++) { int st,S; st=S=G[i][j]; for(;st;st-=st&-st) { int cur=pw[st&-st]; dp[S^(1<<cur)]+=dp[S]*2.0/i/(i-1)*P[S][cur]; } } } for(int i=0;i<n;i++) printf("%.6f ",dp[(1<<i)]); //system("pause"); return 0; }
相关文章推荐
- Codeforces Beta Round #16 (Div. 2 Only), problem: (E) Fish 概率DP
- 【CS Round #36 (Div. 2 only) A】Bicycle Rental
- Codeforces Round VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM 暴力出奇迹!
- codeforces水题100道 第十七题 Codeforces Beta Round #25 (Div. 2 Only) A. IQ test (brute force)
- 【dfs找环】Codeforces Beta Round #80 (Div. 1 Only)——B. Cthulhu
- Codeforces Beta Round #91 (Div. 2 Only) C. Lucky Sum
- Codeforces Beta Round #4 (Div. 2 Only) C. Registration system
- Codeforces Beta Round #4 (Div. 2 Only)
- 『NYIST』第九届河南省ACM竞赛队伍选拔赛[正式赛二]- Nearly Lucky Number(Codeforces Beta Round #84 (Div. 2 Only)A. Nearly)
- Codeforces Round #437 (Div. 2 C. Ordering Pizza 贪心 only two types of pizza
- 【CS Round #44 (Div. 2 only) D】Count Squares
- #9 (Div. 2 Only) D. How many trees? (dp)(好题)
- Codeforces Beta Round #9 (Div. 2 Only)
- codeforces水题100道 第二题 Codeforces Beta Round #4 (Div. 2 Only) A. Watermelon (math)
- CS Academy Round #74 (Div. 2 only) A B C D E
- Codeforces Beta Round #22 (Div. 2 Only)-B. Bargaining Table
- Codeforces Beta Round #79 (Div. 1 Only) B. Buses 树状数组
- Codeforces Round #437 (Div. 2 C. Ordering Pizza 贪心 only two types of pizza
- Codeforces Beta Round #6 (Div. 2 Only) E. Exposition
- Codeforces Beta Round #93 (Div. 2 Only)——B