码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ】【1076】【SCOI2008】奖励关

时间:2015-02-22 23:06:52      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

状压DP+数学期望

  蒟蒻不会啊……看题跑……

  Orz了一下Hzwer,发现自己现在真是太水了,难道不看题解就一道题也不会捉了吗?

  题目数据范围不大……100*(2^16)很容易就跑过去了……

  DP的时候max一下是接不接当前这第k个宝物……最后除以N(算期望)

技术分享
 1 /**************************************************************
 2     Problem: 1076
 3     User: Tunix
 4     Language: C++
 5     Result: Accepted
 6     Time:1336 ms
 7     Memory:52984 kb
 8 ****************************************************************/
 9  
10 //BZOJ 1076
11 #include<cstdio>
12 #include<cstdlib>
13 #include<cstring>
14 #include<iostream>
15 #include<algorithm>
16 #define rep(i,n) for(int i=0;i<n;++i)
17 #define F(i,j,n) for(int i=j;i<=n;++i)
18 #define D(i,j,n) for(int i=j;i>=n;--i)
19 using namespace std;
20  
21 int getint(){
22     int v=0,sign=1; char ch=getchar();
23     while(ch<0||ch>9) {if (ch==-) sign=-1; ch=getchar();}
24     while(ch>=0&&ch<=9) {v=v*10+ch-0; ch=getchar();}
25     return v*=sign;
26 }
27 /*******************tamplate********************/
28 const int N=101,M=(1<<16);
29 double f[N][M];
30 int w[16],d[16],n,K;
31 int main(){
32 //  freopen("input.txt","r",stdin);
33     K=getint(); n=getint();
34     int t;
35     F(i,1,n){
36         w[i]=getint();
37         t=getint();
38         while(t){ d[i]|=1<<(t-1); t=getint();}
39     }
40     D(i,K,1)
41         rep(j,1<<n){
42             F(k,1,n)
43                 if ( (d[k]&j)==d[k] )
44                     f[i][j]+=max(f[i+1][j],f[i+1][j|(1<<(k-1))]+w[k]);
45                 else f[i][j]+=f[i+1][j];
46             f[i][j]/=n;
47         }
48     printf("%.6lf",f[1][0]);
49     return 0;
50 }
View Code

 

【BZOJ】【1076】【SCOI2008】奖励关

标签:

原文地址:http://www.cnblogs.com/Tunix/p/4297773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!