两个常见模型

两个常见模型

bzoj4321

编号为1~n的人排成一排,问有多少种排法使得任意相邻两人的编号之差不为1或-1。
n<=1000

破坏空位:有两个相邻的之间

我们设\(f[i][j]\)表示1~i的排列,有j组相邻的相差1,且i和i-1不相邻的方案数;

我们设\(g[i][j]\)表示1~i的排列,有j组相邻的相差1,且i和i-1相邻的方案数;

考虑插入i+1的位置,有:

不破坏空位且不与 i 相邻、不破坏空位且与 i 相邻、破坏空位且不与 i 相邻、破坏空位且与 i 相邻(只发生在 g 的转移) 4种。

分别推一下方案数:

首先考虑i和i-1相邻的方案数:

我们考虑一下i-2,i-1和i的关系:

  1. i-1与i-2相邻,然后我们将i放在i-1与i-2的中间:这样将i-1,i-2这一对相邻拆开了,但是又增加了i和i-1这一对,所以相邻的个数相当于没增也没减,也就是\(g[i][j]\)有一项是从\(g[i-1][j]\)转移过来的(前i-1个数,i-1和i-2相邻,共有j对相邻)
  2. i-1与i-2相邻,但是i不放在i-1与i-2的中间,而放在i-1的另一侧:这样我们没有破坏i-1和i-2这一对相邻,并且新增加了i-1和i这一对相邻,因此相邻数增加了1,转移后是j,那么转移前应该是j-1:\(g[i-1][j-1]\)
  3. i-1与i-2不相邻:那么我们也就可以将i放在i-1的一侧,这样增加一对相邻,由于可以将i放在i-1左右两边共两种情况,所以:\(f[i-1][j-1]*2\)因为i-1和i-2不相邻嘛,所以用f;

\(g[i][j]=g[i-1][j]+g[i-1][j-1]+f[i-1][j-1]*2\)

同理可以推出\(f[i][j]\)的转移方程:

  1. 本来i-1与i-2相邻,将i插入j对相邻的数的任意一对,这样就破坏了一对,这样方案来源于\(g[i-1][j+1]\),有(j+1-1)种位置可以选(i-1与i-2那对不能拆,因为插入又会形成新的)。
  2. 本来i-1与i-2不相邻,将i插入j对相邻的数的任意一对,这样就破坏了一对,这样方案来源于\(f[i-1][j+1]\),有(j+1)种位置可以选。
  3. 又可能i不去拆开相邻的数,就可以来源于 \(g[i-1][j]\)*(i-j-1)(可以插入i-1与i-2,不改变对数) 或 \(f[i-1][j]\)*(i-j-2)

\(f[i][j]=g[i-1][j+1]*j+f[i-1][j+1]*(j+1)+g[i-1][j]*(i-j-1)+f[i-1][j]*(i-j-2)\)

最后的答案就是\(f[n][0]\)

时间复杂度 O(n^2) 。

BZOJ2560 串珠子

有n个珠子,第i和j个珠子之间有\(c[i][j]\)条不同的绳子可选。每对珠子之间可以选择不连绳子,也可以选择用其中一种绳子连接。
问有多少种方案能使n个珠子成为连通图。
n<=16

连通图计数套路: 用总数减去不连通的方案数,而不连通的方案数,可以枚举1号点所在连通块的点集(有的问题中是大小) ,用这个点集的连通方案数乘以剩余点集的总方案数即可。???

我们设两个数组,g[s]表示s状态下的所有情况,即s状态下的点两两之间任意连边(包括不连边的情况),f[s]表示s状态下的合法情况,即使得s状态下所有点连通的合法情况。那么答案就是f[2^n-1]。

\(g[s]=g[s-(1<<i)]+\sum_{j\in s-(i<<i)}[i][j]\) \(O(n*2^n)\)

然后我们可以很容易地求出g[s],我们求出g[s]后,考虑如何求f[s],f[s]就是g[s]减去所有的不合法情况。那么我们可以枚举s的所有子集,设子集为i,那么不合法的情况就是g[i]*f[s^i],我们减去这些情况,就能求出f[s]了。

原文地址:https://www.cnblogs.com/zhuier-xquan/p/11330013.html

时间: 2024-08-04 20:18:31

两个常见模型的相关文章

推荐系统的几种常见模型概述

某个选修课的论文,这里贴过来,之所以贴过来,是因为我认为自己写的确实非常有意义,网上对这个东西确实没有很系统的中文介绍,我自己也是看了许多论文自己也动手做了很多很多实践才领悟的. 这个只是概论,以后有时间再加上具体的模型.算法. ----------------------------------------------------------------------------- 总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这

JMS两种消息模型

前段时间学习EJB,接触到了JMS(Java消息服务),JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型. 个人觉得这两个模型挺容易理解的,因为生活中的例子还挺多的. 1,  P2P模型 有以下概念:消息队列(Queue).发送者(Sender).接收者(Receiver).每个消息都被发送到一个特定的队列,接收者从队列获取消息.队列保留着消息,直到它们被消费或超时. (1) 每个消息只有一个消费者(Co

两个常见的OpenCV Error

本人在在调试过程中遇到的两个常见的OpenCV Error,跟大家分享一下解决办法: 第一个:OpenCV Error: Assertion failed <dims <=2 && data && <unsigned >i0 < <unsigned>size.p[0] && <unsigned >< i1,后面一大串,还是直接截图吧 经过调试发现发生这种错误的原因在于,你访问构造矩阵时越界了,所以报

[002] 两种常见的代码组织结构

1. 按照应用程序的业务逻辑来组织结构 办公软件: 1. 采购 com.itheima.buy 2. 开会 com.itheima.meeting 3. 请假 com.itheima.leave 2. 根据与代码的类型划分程序包结构 UI界面展现         com.itheima.mobilesafe.activity 自定义的UI         com.itheima.mobilesafe.activity.ui 业务逻辑             com.itheima.mobiles

两个盒模型之间的空隙

html文档中的每个元素都被描绘成矩形盒子,这些矩形盒子通过一个模型来描述其占用空间,这个模型称为盒模型.盒模型通过四个边界来描述:margin(外边距),border(边框),padding(内边距),content(内容区域),这个大家都知道,那什么是两个盒模型之间的空隙呢?该怎么清除它呢? 假设有一个class为content的父div,里面包含两个子div,这两个子div要同一行显示,我们想要两个子div紧紧连接在一起,所以把它们的margin和padding值全部设为0. 1 <sty

移动站Web开发图片自适应两种常见情况解决方案

本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集,这种文章只需要左右滑动浏览,最好的体验是让图片缩放显示在屏幕有效范围内,防止图片太大导致用户需要滑动手指移动图片来查看这种费力气的事情,用户体验大大降低.二是图文混排的文章,图片最大宽度不超过屏幕宽度,高度可以auto.这两种情况在项目中很常见.另外,有人说做个图片切割工具,把图片尺寸比例都设定为统

css的两种盒子模型

css的两种盒子模型:W3C标准盒子模型.IE盒子模型 两者的相同之处:都包含margin.border.padding.content 两者的不同之处:W3C标准盒子模型的content部分不包含其他部分:IE盒子模型的content部分包含border.padding部分. 举例说明:一个盒子模型margin为10px,border为2px,padding为5px,content为100px,高为50px. 1.W3C标准盒子模型 盒子需要占据的位置:宽10*2+2*2+5*2+100=13

内存数据持久化的两种常见方法

内存数据持久化的两种常见方法: 1.将内存数据定期dump到磁盘 优点:效率高,操作简便 缺点:会损失部分数据 2.利用类似于mysql的binlog日志的方式,记录更新操作,需要时回放数据 优点:可保证数据完整性 缺点:会损失部分性能,实现稍微复杂点 redis实现了这两种方式

DIV+CSS两种盒子模型(W3C盒子与IE盒子)

在辨析两种盒子模型之前,先简单说明一下什么叫盒子模型. 原理: 先说说我们在网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模式. 特点: 每个盒子都有:边界.边框.填充.内容四个属性: 每个属性都包括四个部分:上.右.下.左:这四部分可同时设置,也可分别设置