HDU 1465 不容易系列之一

原题链接:点击此处

解题思路:

一道应该属于递推的题目。

就是N封信都装错信封了。。。

假设信封有7个吧:A~G

A

_ _ _ _ _ _ _ 

a

向A里装错有7-1种情况,先选一种放b

A

b _ _ _ _ _ _

开始放B的,B可以放a也可以放其他的,如果放a,则就是剩下n-2个的排列了,

如果放其他的假设放c那就是剩下n-1的排列

这样就可以总结出来规律:

f[n]= (n-1)*( f[n-1] + f[n-2])。

源代码:

#include <iostream>
#include <stdio.h>
using namespace std;
long long a[21]={0,0,1,2};
int n;
int main()
{
    for(int i=3;i<=21;i++)
        a[i]=(i-1)*(a[i-1]+a[i-2]);
    while(cin>>n)
        cout<<a[n]<<endl;
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/gdvxfgv/p/5743620.html