首页 > 其他分享 >【题解】A. 错排问题

【题解】A. 错排问题

时间:2024-10-25 20:42:08浏览次数:1  
标签:20 int 题解 位置 个数 问题 错排

递推T1

题面(可从下方链接跳转看原题题面):

求多少个 n 个数的排列 ,满足对于任意的 i(1≤i≤n),有 Ai≠i 。

题目传送门

序言 & 结论:

这是一道经典的题目,可以先记一下这个结论,设 f[n] 表示有 n 个数错排

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

推理过程:

  • f[n] 状态的设置是显然的(无需多言)
  • 边界状态有 f[1]=0,f[2]=1
  • 考虑转移

首先,我们从 n 个数中取出一个数 x,并且 x 占据了 y 的位置,对于 y 进行分类讨论

  1. 若 y 占据了 x 的位置
    则问题转化为计数剩余 n-2 个数的错排问题,即 f[n-2]
  2. 若 y 占据了一个非 x 的新的位置
    则问题与 x 无关,转化为不包含 x 而包含 y 的 n-1 个数的错排问题,即 f[n-1]

由加法原理,对于任意一个固定位置的x,都有方案数=f[n-1]+f[n-2]
考虑到x的位置是从除 x 本身的 n-1 个位置中任意选取的,故 f[n]=(n-1)*(f[n-1]+f[n-2])

细节处理:

  • 观察数据范围 n≤20,f[n] 是会爆 int 的(别问我是怎么知道的,反正是见到祖宗了 qwq)
  • 注意边界状态赋值 f[1]=0,f[2]=1

代码:

讲的很详细了,注释就不写了

点击查看代码
#include<iostream>
#define ll long long
using namespace std;
const int maxn=20+10;
ll n,f[maxn];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	f[1]=0;
	f[2]=1;
	for(int i=3;i<=20;i++){
		f[i]=(i-1)*(f[i-1]+f[i-2]);
	}
	/*
	for(int i=1;i<=20;i++){
		cout<<f[i]<<" ";
	}
	*/
	cout<<f[n]<<endl;
	return 0;
}

完结撒花!

标签:20,int,题解,位置,个数,问题,错排
From: https://www.cnblogs.com/sunxuhetai2009/p/18503219

相关文章

  • 题解:Tokitsukaze, CSL and Stone Game
    ProblemLinkTokitsukaze,CSLandStoneGame题外话对于某些人说降绿甚至降黄,本人是很不同意的,毕竟多一道水蓝有什么不好题意翻译得很简洁,不再赘述。Solution不难发现有以下几种情况:只有两堆不等的,肯定选少的那堆,因为这样不易使得两堆相等。若两堆相等,一定破坏相等......
  • 易考八股文之Redis在你项目中怎么用,如果Redis宕机,应用服务还会响应吗?会造成哪些问题,如
    在项目中,Redis可以用于多种用途,例如:缓存数据:将经常访问的数据存储在Redis中,减少对后端数据库的查询压力,提高应用的响应速度。会话管理:存储用户会话信息,方便在分布式系统中管理用户登录状态等。如果Redis宕机,应用服务可能仍然会响应,但会面临一些问题:数据丢失:如果没有配置持久......
  • Windows11系统imkrudt.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个imkrudt.dll文件(挑选合适的版本文件)把它放......
  • Windows11系统imkrmig.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个imkrmig.dll文件(挑选合适的版本文件)把它放......
  • ZZJC新生训练赛第九场题解
    A题思路重点在于题目操作蕴含的奇偶数关系,一个偶数可以和一个奇数一起删除,两个奇数可以一起删除。代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cin>>n;vector<int>ar(......
  • Redis高并发超时问题
     StackExchange.Redis驱动有个超时问题,并发比较高的时候就会出现类似以下错误,比如开3000个线程: StackExchange.Redis.RedisConnectionException:Itwasnotpossibletoconnecttotheredisserver(s).Errorconnectingrightnow.Toallowthismultiplexertocontin......
  • 蓝桥首场算法团队战2024.10.24 题解(1~5)
    蓝桥首场算法团队战2024.10.24题解1:不同角度【算法赛】题意:给定自然数S,需要找出一个自然数T。使得数字T>数字S并且S和T转化为字符串后,满足S的字典序>T的字典序。T一定存在,找出符合条件且字典序最小的T。输入:第一行一个整数t,表示t组测试用例。\((......
  • 游戏《波西亚时光》启动错误:如何应对d3dx9_42.dll丢失导致的启动问题
    一、引言《波西亚时光》是一款深受玩家喜爱的游戏,但在玩家启动游戏时,有时可能会遇到“d3dx9_42.dll丢失”的错误提示,这使得玩家无法顺利进入游戏,影响了游戏体验。本文将详细探讨d3dx9_42.dll文件在游戏中的作用、丢失的原因以及有效的解决方法,帮助玩家解决这一启动问题,......
  • 小智桌面遭遇mfc100u.dll加载失败?解决小智桌面因mfc100u.dll缺失导致的加载问题
    在使用小智桌面这款高效、便捷的桌面管理软件时,用户可能会遇到这样一个问题:XZDesktop64.exe在尝试加载mfc100u.dll文件时失败了。这通常意味着系统中缺少了mfc100u.dll这一关键的系统文件,导致小智桌面无法正常运行。本文将详细介绍mfc100u.dll文件的重要性、丢失原因以及多种解......
  • HTML一键打包EXE工具1.9.97更新 - 支持网络验证(添加卡密), 并修复若干问题, 附免费版
    HTML一键打包EXE工具(HTML转EXE,网址打包PC程序)是一款强大的应用程序,能够将任意HTML项目或网页转换为独立的EXE文件。这意味着无需额外安装浏览器或服务器,用户只需简单双击即可运行项目。无论您是在制作KRPano全景VR项目,开发WebGL游戏(如Egret、Cocos、RPGMVMaker),还是需要打包......