#1075 : 开锁魔法III
来源:互联网 发布:淘宝网买电动车可靠吗 编辑:程序博客网 时间:2024/04/29 16:51
描述
一日,崔克茜来到小马镇表演魔法。
其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它。初始时,崔克茜将会随机地选择 k 个盒子用魔法将它们打开。崔克茜想知道最后所有盒子都被打开的概率,你能帮助她回答这个问题吗?
输入
第一行一个整数 T (T ≤ 100)表示数据组数。 对于每组数据,第一行有两个整数 n 和 k (1 ≤ n ≤ 300, 0 ≤ k ≤ n)。 第二行有 n 个整数 ai,表示第 i 个盒子中,装有可以打开第 ai 个盒子的钥匙。
输出
对于每组询问,输出一行表示对应的答案。要求相对误差不超过四位小数。
45 12 5 4 3 15 22 5 4 3 15 32 5 4 3 15 42 5 4 3 1
0.0000000000.6000000000.9000000001.000000000
#include <iostream> #include <map>#include <vector>#include <string>#include <cstring>using namespace std;int math[302];int visit[302];double c[320][320];double dp[320][320];vector<int>loop;void Count(){for(int i=0;i<=300;i++){c[i][0]=c[i][i]=1.0;for(int j=1;j<i;j++){c[i][j]=c[i-1][j-1]+c[i-1][j];}}}int main(){Count();int t;cin>>t;while(t--){int n,k;cin>>n>>k;for(int i=1;i<=n;i++){cin>>math[i];}loop.clear();memset(visit,0,sizeof(visit));int cur=0;for(int i=1;i<=n;i++){if(visit[i])continue;cur=0;int cnt=i;while(!visit[cnt]){visit[cnt]=1;cnt=math[cnt];cur++;}loop.push_back(cur);}int num=loop.size();if(num>k){printf("%.9lf\n",0.0);continue;}memset(dp,0,sizeof(dp));dp[0][0]=1.0;for(int i=0;i<num;i++){for(int j=0;j<k;j++){if(dp[i][j]==0)continue;for(int use=1;use<=loop[i]&&j+use<=k;use++){dp[i+1][j+use]+=dp[i][j]*c[loop[i]][use];}}}printf("%.9lf\n",dp[num][k]/c[n][k]);}}
- #1075 : 开锁魔法III
- hihoCoder 1075 开锁魔法III
- hihocoder #1075 : 开锁魔法III
- hihocoder #1075 : 开锁魔法III
- hihocoder 1075 开锁魔法III(置换+DP)
- hihoCoder 1075 开锁魔法III (dp,划分阶段)
- [dp+组合数学] hihocoder 1075 开锁魔法III
- [DP 组合] BZOJ5004 & Hihocoder1075. 开锁魔法 III
- [ACM] hihoCoder 1075 开锁魔法III (动态规划,组合数学)
- Hrbust 2250 开锁魔法III【Dp+long double】
- 开锁魔法 DP+组合数
- bzoj 5004: 开锁魔法II
- 哈理工2249开锁魔法 概率dp
- Hrbust 2249开锁魔法II(dp)
- hrbust 2249 开锁魔法II【概率dp】
- 5004: 开锁魔法II 概率DP
- 开锁
- 开锁
- 摩根史丹利在线笔试(Java)
- #1055 : 刷油漆
- 浏览器是如何渲染网页的
- 【笔记】关键字extern与连接性
- Http协议缓存的处理机制
- #1075 : 开锁魔法III
- 改变任务的优先级,OSTaskChangePrio()
- 深入理解ES6箭头函数的this以及各类this面试题总结
- Sunscreen POJ
- 例题5-6 团体队列 Uva540
- NodeJS-代码的组织和部署(二)
- 保存网址
- LeetCode 101. Symmetric Tree 递归解法
- linux笔记