不容易系列之一(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]

 

 

posted @ 2013-03-25 14:41  supersnow0622  Views(107)  Comments(0)    收藏  举报