Topcoder SRM 562 DIV2 900 RandomOption
来源:互联网 发布:股中王股票行情软件 编辑:程序博客网 时间:2024/06/06 00:17
给定
几乎是一道裸的状压dp题(虽然我没有看出来)。我们定义
首先考虑递归的做法:
对于当前层
在递归调用中就只会出现两种情况:
1.最基本的情况,
2.中间情况,在
再考虑到有ban的要求,那么如果
根据以上分析,就可以轻松写出这个裸状压dp:
class RandomOption {public: int Ban[15][15]; int All_lane,n; double dp[1<<14][15]; double rec(int Set_lane,int pre){ double &res=dp[Set_lane][pre]; if(res)return res; int cnt=0; for(int x=0;x<n;x++) if(Set_lane>>x&1){ if(!Ban[pre][x]) res+=rec(Set_lane-(1<<x),x); cnt++; } if(!cnt)res=1.0; else res/=1.0*cnt; return res; } double getProbability(int keyCount,vector<int> bad1,vector<int> bad2) { for(int i=0;i<bad1.size();i++){ int u=bad1[i],v=bad2[i]; Ban[u][v]=Ban[v][u]=1; } n=keyCount,All_lane=(1<<n)-1;//0 ~ 14 return rec(All_lane,n); }};
接下来根据递归的思路写出递推:
由于每一层的状态都是
class RandomOption {public: int Ban[15][15]; int All_lane,n; double dp[1<<14][15]; double getProbability(int keyCount,vector<int> bad1,vector<int> bad2) { for(int i=0;i<bad1.size();i++){ int u=bad1[i],v=bad2[i]; Ban[u][v]=Ban[v][u]=1; } n=keyCount,All_lane=(1<<n)-1; for(int i=0;i<n;i++)dp[0][i]=1.0;//特判Set为空集的情况 for(int S=1;S<All_lane;S++){ int cnt=0; for(int i=0;i<n;i++)if(S>>i&1)cnt++; for(int pre=0;pre<n;pre++){ if(S>>pre&1)continue; for(int to=0;to<n;to++){ if((S>>to&1)&&!Ban[pre][to]) dp[S][pre]+=dp[S-(1<<to)][to]/(1.0*cnt); } } } for(int to=0;to<n;to++)//特判Set为全集的情况 dp[All_line][n]+=dp[All_line-(1<<to)][to]/(1.0*keyCount); return dp[All_lane][n]; }};
- Topcoder SRM 562 DIV2 900 RandomOption
- TopCoder SRM 562 div2总结
- Topcoder SRM 701 Div2 900 ThueMorseGame
- topcoder SRM 513 DIV2
- TopCoder SRM 543 DIV2
- topcoder-srm-233-div2
- Topcoder SRM Div2 Level2
- TopCoder SRM 144 div2
- TOPCODER SRM 612 DIV2
- TOPCODER SRM 613 DIV2
- topcoder-srm-613-div2
- topcoder-srm-604-div2
- topcoder-srm-595-div2
- Topcoder SRM 676 div2
- Topcoder SRM 677 div2
- Topcoder SRM 688 div2
- Topcoder SRM 687 div2
- Topcoder srm div2 500
- OpenCV五大模块
- 809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
- 如何高效率的完成pdf转换成jpg格式
- android圆形图片,圆形背景文字的CircleTextImageView开源组件
- 衔接服务器连接错误,错误代码15466和15185的解决办法
- Topcoder SRM 562 DIV2 900 RandomOption
- hdu 3333 离线+树状数组
- 聊聊高并发系统之队列术
- React Native 学习笔记六(关于宽高的设置)
- java中接口和抽象类的区别与联系
- Shell
- shell中各种括号的作用()、(())、[]、[[]]、{}
- Eclipse Java注释模板设置详解
- POI 方式-excle导出工具类实现