您的位置:首页 > 其它

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

2015-06-05 18:46 239 查看
http://http://acm.hdu.edu.cn/showproblem.php?pid=1465

装错信封问题

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

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

A,B表示信,a,b表示信封,假设一共有n个信封,用f
记录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
<<endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: