hihocoder #1075 : 开锁魔法III

原创 2016年05月31日 21:29:39

题目描述:http://hihocoder.com/problemset/problem/1075

没想法,后来看了题解,对概率进行dp,结果wa了

看了这篇文章:http://www.cnblogs.com/gaoxiang36999/p/4451493.html

是对能够打开全部箱子的方法数进行dp,最后除以总的数量

#include <stdio.h>
#include <string.h>
#define MAX_N 300

int n, k, box[MAX_N+1], cir[MAX_N+1], CIR, vis[MAX_N+1]; 
double dp[MAX_N+1][MAX_N+1], c[MAX_N+1][MAX_N+1];

void initComb(){
	int i, j;
	for(i = 0; i <= MAX_N; i++){
		c[i][0] = c[i][i] = 1.0;
		for(j = 1; j < i; j++){
			c[i][j] = c[i-1][j-1] + c[i-1][j];
		}
	}
}

int main(){
	int T, i, j, m, l, cc, c1, c2;
	double temp;
	
	initComb();
	
	scanf("%d", &T);
	while(T--){
		scanf("%d%d", &n, &k);
		for(i = 1; i <= n; i++){
			scanf("%d", &box[i]);
		}
		
		memset(vis, 0, sizeof(vis));
		CIR = 0;
		for(i = 1; i <= n; i++){
			if(!vis[i]){
				vis[i] = 1;
				cc = 1;
				j = box[i];
				while(i != j){
					vis[j] = 1;
					cc++;
					j = box[j];
				}
				cir[++CIR] = cc;
			}
		}
		
		memset(dp, 0, sizeof(dp));
		cc = cir[1];
		for(i = 1; i <= cc; i++){
			dp[1][i] = c[cc][i];
		}
		for(i = 2; i <= CIR; i++){
			c1 = cc;
			c2 = cir[i];
			cc = c1 + c2;
			for(j = i; j <= k && j <= cc; j++){
				for(m = 1; m < j && m <= c2; m++){
					if(j-m <= c1){
						temp = 1.0;
						dp[i][j] += c[c2][m]*dp[i-1][j-m];
					}
				}
			}
		}
		printf("%.9lf\n", dp[CIR][k]/c[n][k]);
	} 
	return 0;
} 



hihocoder #1035 : 自驾旅行 III

题目描述:hihocoder.com/problemset/problem/1035 看了题目后没有任何思路,于是看了这篇文章:http://blog.csdn.net/acmmaxx/articl...
  • ZzebraA
  • ZzebraA
  • 2016年04月17日 21:28
  • 811

hihoCoder 1075 开锁魔法III

题目链接:http://hihocoder.com/problemset/problem/1075 一道不错的组合数学加动态规划的题。 因为是中文题目,大意比较好理解。 由于我们可以通过魔法打开...

hihoCoder 1075 开锁魔法III (dp,划分阶段)

题意: 一日,崔克茜来到小马镇表演魔法。 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它。初始时,崔克茜将会随机地选择 k 个盒子用魔...

[dp+组合数学] hihocoder 1075 开锁魔法III

题意: 中文题~ 思路: 首先需要处理的就是把所有的环找出来 环的意思就是这个环里面只要有一个盒子被打开了,其他盒子就都被打开了。 比如样例。就是有两个环(1,2,5) 和 (3,4)并记录...
  • wdcjdtc
  • wdcjdtc
  • 2015年03月30日 12:15
  • 613

hihocoder #1075 : 开锁魔法III

时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 一日,崔克茜来到小马镇表演魔法。 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中...
  • youb11
  • youb11
  • 2015年05月22日 20:47
  • 457

[ACM] hihoCoder 1075 开锁魔法III (动态规划,组合数学)

描述 一日,崔克茜来到小马镇表演魔法。 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它。初始时,崔克茜将会随机地选择 k 个盒子用魔法将它...

为什么我没有拔出钥匙 ——开锁引发的程序bug解决方案的思考

为什么我没有拔出钥匙                             ——开锁引发的程序bug解决方案的思考        今天中午回宿舍的时候,舍友S开完锁以后,钥匙在锁槽里拔不出来了。以前...

开锁行业也要实名制了 锁匠是否靠谱有据可依

开锁行业也要实名制了 锁匠是否靠谱有据可依 工作日每天早出晚归,大部分的时间都在外面奔波劳作,家门也一直处于紧闭状态。倘若回家时发现丢了钥匙进不了家门怎么办?楼道间贴满的“紧急开锁”小广告可...

Android定制化自己的开锁界面

android 在4.0以前,解锁界面是采用横滑的方式,在4.0之后,就采用了中心圆环的解锁方式,4.0和4.1都是有三个图标的,分别是:向上的google搜索应用,向左的拍照应用以及向右的正常解...

蓝牙智能锁--手机开锁,授权

转自:http://www.kickstarter.com/projects/804149834/teo-the-future-of-the-padlock-is-here?ref=footer ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hihocoder #1075 : 开锁魔法III
举报原因:
原因补充:

(最多只允许输入30个字)