不容易系列之一(HDOJ1465)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1465
解题分析:
信 : A B C D E F G......
信封:a b c d e f g......
假设n封信全放错有f(n)种可能,则n-1封信全放错有f(n-1)种可能
如果A信放错了,有n-1种可能,1、假如A错放入b中,而B也错放入a中,则剩下的n-2个放错有f(n-2)种可能,所以这种情况有(n-1)*f(n-2)种可能;
2、假如A错放入b中,而B没有放入a中,则剩下的包含B在内的n-1封信放错有f(n-1)种可能,所以这种情况有(n-1)*f(n-1)种可能。
所以f(n)=(n-1)*(f(n-1)+f(n-2))
源代码如下:
#include<iostream>
using namespace std;
int main()
{
_int64 arr[21];
arr[2]=1;
arr[3]=2;
for(int i=4;i<21;i++)
{
arr[i]=(i-1)*(arr[i-1]+arr[i-2]);
}
int num;
while(cin>>num)
{
cout<<arr[num]<<endl;
}
}
[ Copy to Clipboard ] [ Save to File]

浙公网安备 33010602011771号