美文网首页
装错信封问题

装错信封问题

作者: 小路子好 | 来源:发表于2019-02-21 20:58 被阅读0次

题目描述

n 封信,n个信封,n封信全部装错,问装错的次数又多少次

分析

n=1时,F[1]=0;n=2,F[2]=1; n封信时,不妨设第一封信在第m信封中,2<=m<=n;分类,若第m封信在第一信封中,两者对换下,则装错方式次数F[n-2],若第m封信不在第一信封中,两者对换下,则装错方式次数F[n-1];
F[n] = (n-1)(F(n-1)+F(n-2))

代码

#include<iostream>
using namespace std;
int dp[21];
int main()
{
    int n;
    while(cin>>n)
    {
        dp[1]=0;
        dp[2]=1;
        for(int i=3;i<=n;i++)
        {
            dp[i]=(i-1)*(dp[i-1]+dp[i-2]);
        }
        cout<<dp[n]<<endl;
    }
}

相关文章

网友评论

      本文标题:装错信封问题

      本文链接:https://www.haomeiwen.com/subject/tccryqtx.html