hdu 2048 神、上帝以及老天爷

题解:

  本题主要思路是,算出i个人的总选择数a和以悲剧结尾的总选择数b,然后b/a,完成。属于递推题:

 

 

图中横杠代表人,竖杠代表签名。Ai代表i个人共有A[i]个选择,Bi起过度作用。因为最多有20人,可将这20个数据存储到数组中以备调用。

  这样很容易得到递推式:B[i] = A[i-2] + (n-2) * B[i-1], A[i] = (i-1) * B[i];

代码如下:

 

#include <stdio.h>

__int64 fact(int n)
{
	__int64 ft = n;
	while (--n)
	{
		ft *= n;
	}
	return ft;
}

int main()
{
	__int64 A[21] = {0, 0, 1}, B[21] = {0, 0, 1}, ft[21] = {1, 1, 2};
	int n, i, t;
	double perc;
	for (i=3; i<=20; i++)
	{
		B[i] = A[i-2] + (i - 2) * B[i-1];
		A[i] = (i - 1) * B[i];
		ft[i] = fact(i);
	}
	scanf("%d", &n);
	while (n--)
	{
		scanf("%d", &t);
		perc = A[t]*100.0/ft[t];
		printf("%.2lf%%\n", perc);
	}
	return 0;
}


 

posted on 2013-01-20 14:27  zm001  阅读(204)  评论(0)    收藏  举报