HDU 1465 不容易系列之一(找规律)

http://http://acm.hdu.edu.cn/showproblem.php?pid=1465

装错信封问题
这个问题是由 18 世纪初的法国数学家蒙摩提出来的。

瑞士数学家欧拉按一般情况给出了一个递推公式

A,B表示信,a,b表示信封,假设一共有n个信封,用f[n]记录n个信封装错的种数

首先针对其中的两个信封进行讨论

假设A装进了b,在这个大前提下

1、如果B装进了a,那么此时装错信封有f[ n-2 ]种

2、如果B没有装进a,那么此时装错信封就有f[ n-1 ]种

那么我们就能得出一个递推式

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

#include <iostream>
using namespace std;
__int64 f[25];
void init()
{
	f[2] = 1;
	f[3] = 2;
	for(int i=4;i<=20;i++)
	{
		f[i] = (i-1)*(f[i-1]+f[i-2]);
	}
}
int main()
{
	int n;
	init();
	while(cin>>n)
	{
		cout<<f[n]<<endl;
	}
	return 0;
}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值