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;
}
浙公网安备 33010602011771号