HDU1465(错排)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

看题传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1465


  这个题其实比较水,如果学习过错排公式或者对DP很熟悉的话应该很快得出递推公式,一开始想的太简单了……上来就交了一发f(n) = f(n-1) * (n-1),当然就WA了,其实这样想是少考虑了一种情况的,下面我们来仔细分析一下错排公式,争取下一次看见能反应过来。

  这个题可以分两步进行,首先设目前对N个信封进行错排,从1开始编号。

            1.对N-1个信封错排完毕后,把第N个信封加入队尾,这时如果把前N-1个信封的位置和第N个信封依次对调,剩下的N-2个位置没有变化的信封进行错排,可以得到(N-1) * f(N-2)个新的错排序列。

            2.但是这样这样的错排方法是不全面的,有许多情况被遗漏了,我们可以考虑:在第一步中,我们设位置K( 1<=K && K <= N-1)的信和位置N的信封位置交换,我们默认把位置K的信件放在了位置N。但是这个位置K的信件如果一定不放在位置N的话,这样问题其实就变成了对除了刚刚放到位置K的信封N的其他N-1个信封的错排,只不过这时原先在位置K的信件对应的正确位置变成了位置N,由于前N-1个信件都可以做出这样的变换,所以这种情况还可以得到和第一步不一样的(N-1) * f(N-1)个错排序列。


#include <cstdio>
#include <cstring>
using namespace std;

long long f(int n)
{
	if(n == 2)
		return 1;
	else if(n == 0 || n == 1)
		return 0;
	return (f(n-1) + f(n-2)) * (n-1);
}

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		printf("%I64d\n",f(n));
	}
}

hdu 1465 http://acm.hdu.edu.cn/showproblem.php?pid=1465 code: #include <iostream> using namespace std; int main(int argc, char *argv[]) { __int64 f[25]; f[2]=1; f[3]=2; int i; for(i=4;i<=2... 阅读详情

相关推荐

HDU-1465

公式:    f(n)=(n-1)*[f(n-1)+f(n-2)]; 注意:在杭电上用__int 64,用long long 就WA了。 #include __int64 f[21]; void fun() { f[1]=0; f[2]=1; for(int i=3;i<=20;i++) f[i]=(i-1)*(f[i-1]+f[i-2]); } int main() { i

ZXLS-ZMR的专栏 804

hdu 1465 (公式问题)

题目大意:事情是这样的——HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装了信封!注意了,是全部装哟!现在的问题是:请大家帮可怜的8006同学计算一下,一共有多少种可能的误方式呢? 题目解析: 1.首先这是一个的问题,我们先来推导一下公式。 2.先从信封2到n中,拿出信封...

weixin_30326745的博客 192

HDU1465 经典题目

题问:给N个人信件全部转信封的情况的总数; 这是经典的题目,百度一下就知道得出递推公司 f(n) = (n-1) *( f(n-1) + f(n-2)); 这里详解一下这条公式是怎么推出来的! 首先,f(n)代表n封信件全部装的情况数。 假设有100个信件需要投递,。那么我把信件分成两部分:99封  和  1封; 我把这99封信给其中一个人A,让他交给其余的人(其中包裹他

ze帆_fan的小屋 716

[递推]hdu1465公式

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1465   f[n]=(f[n-1]+f[n-2])*(n-1) 有N个信封的时候,可以考虑第N个信封本来是对的。则对于这个信封只有两种选择,一种是找一个的交换,一种是找另一个对的交换。找一个的信封交换即从n-1种的信封中任取一封交换即f[n-1]*(n-1);另一种找n-1中唯一对的信封与之

#include<Excelsior> 901

HDU1465 不容易系列之一(问题)

不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28892Accepted Submission(s): 12643 Pr...

雷恩的博客 363

HDU 1465 不容易系列之一 ()

HDU 1465 不容易系列之一 () , 自己没想出来参考算法敲出来的...唉 递推:N个信封, 有wr_match[N]表示N个信封的数.wr_match[N] = (1) + (2);(1) : N - 1个人的信封装, 一个人没装的情况(2) : N - 2个人的信封装, 两个人没装的情况 2010-11...

weixin_30919235的博客 153

HDU - 1465

HDU - 1465) 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。 话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做了!大家都学过概率论,应该知道出现这种情况的概...

weixin_43179892的博客 154

HDU - 1465 不容易系列之一 【

Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。 话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做了!大家都学过概率论,应该知道出现这种情况的概率...

一定要站在自己热爱的生活里闪闪发光 3万+

hdu 1465公式)

题目大概意思就是写了N封信,然后全部都装了,问有多少种装的方法? 这种题目都是递推型的,首先我们需要确定对于简单的情况,比如N=2的情况,N=3的情况,是否能够直接得出答案,然后考虑规模扩大到N-1,N的情况,好,我们来分 这个题目。 N=2, 1; N=3, 3; 接着N=4,貌似有点复杂了,不过也能自己在纸上比划出答案来,那么我们来考虑N的情况吧。 对于N,前N-1封信可以全部

Fighting_Frank 736

HDU 1465 公式

事情是这样的——HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装了信封!注意了,是全部装哟! 现在的问题是:请大家帮可怜的8006同学计算一下,一共有多少种可能的误方式呢? 输入数据包含多个多个测试实例,每个测试实例占用一行,每行包含一个正整数n(1<n<=20),n表示8006的网...

青春苦瓜 366

HDU 1465 不容易系列之一( 水题 )

链接:传送门 思路:模板题,水题是非常浪费时间的 /************************************************************************* > File Name: hdu1465.cpp > Author: WArobot > Blog: http://www...

dijingzhou4259的博客 197

HDU1465

http://acm.hdu.edu.cn/showproblem.php?pid=1465 不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12333    Accepted Submission(s):

CSDN 1701

问题 公式 Hdu 1465 + 2048 +2049 + 2068 + 4535

也称 伯努利-欧拉装信封问题 n公式:F[n]=(n-1)*(F[n-1]+F[n-2]) 证明: 1.当前n-1个时:将其任意一封信与n对调,共(n-1)*F[n-1] 2.当前n-2个,1个不时,将不的那封信与n对调,共(n-1)*F[n-2] 3.当前≤n-3个,≥2个不时,显然无解. ∴F[n]=(n-1)*F[n-1]+(n-2)*F[n-2]

whyorwhnt的专栏 1962

ACM——(hdu1465)

AC__GO的博客 678

HDU 1465()

不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13457    Accepted Submission(s): 5615 Problem Description 大家常常感慨,要做好一件事情真的不

在风雨中奔跑 549

hdu1465()

题目分析: 可以自己看题目,装信封的种类 http://acm.hdu.edu.cn/showproblem.php?pid=1465 题目分析: 直接公式 AC代码: /**  *f[n]=(n-1)*(f[n-1]+f[n-2])  *第i个人不能占自己的位置,共有n-1中选择,对于下一个  *人,  */ #include using n

机器笨猫 1542

HDU 1465(公式)

颜书先生《“装信封问题”的数学模型与求解》一文(见《数学通报》 2000 年第 6 期 p.35 ),给出了该经典问题的一个模型和求解公式: 编号为 1 , 2 ,……, n 的 n 个元素成一列,若每个元素所处位置的序号都与它的编号不同,则称这个列为 n 个不同元素的一个。记 n 个不同元素的总数为 f(n) ,则   f(n) = n![1-1/1!+1/2!-1/3!+……

792

hdu1465--组合数学之

公式:D(n)=(n-1)*(D(n-1)+D(n-2)) 详见博文: 组合数学公式 ac代码: #include<iostream> #include<cstring> using namespace std; typedef long long ll; ll res[23]; int n; void Init() { res[1]=0; res[2]=1; res[3]=2; for(int i=4;i<=20;i++){ res[i]=(i-1

fusu123456789的博客 243

hdu1465 不容易系列之一(公式)

Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。 话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做了!大家都学过概率论,应该知道出现...

一身清贫怎敢入繁华 436
上一篇: POJ 1664(动规)
下一篇: POJ 3312 (二分)
Aldo101
博客等级 码龄9年 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值