BZOJ2302 [HAOI2011]Problem c 【dp】

题目

给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,ai+1也被占据了的话就尝试ai+2,……,如果一直尝试到第n个都不行,该安排方案就不合法。然而有m个人的编号已经确定(他们或许贿赂了你的上司...),你只能安排剩下的人的编号,求有多少种合法的安排方案。由于答案可能很大,只需输出其除以M后的余数即可。

输入格式

第一行一个整数T,表示数据组数

对于每组数据,第一行有三个整数,分别表示n、m、M

若m不为0,则接下来一行有m对整数,p1、q1,p2、q2 ,…, pm、qm,其中第i对整数pi、qi表示第pi个人的编号必须为qi

输出格式

对于每组数据输出一行,若是有解则输出YES,后跟一个整数表示方案数mod M,注意,YES和数之间只有一个空格,否则输出NO

输入样例

2

4 3 10

1 2 2 1 3 1

10 3 8882

7 9 2 9 5 10

输出样例

YES 4

NO

提示

100%的数据满足:1≤T≤10,1≤n≤300,0≤m≤n,2≤M≤109,1≤pi、qi≤n 且保证pi互不相同。

题解

容易发现其实这是插入顺序无关的
位置插入是否合法,只要看这个位置及其之后是否坐满

直接难以计算一个位置之后坐了多少
但是坐到一个位置前的人的编号一定比这个位置小
如果编号为一个位置及其之前的位置的人数小于这个位置的编号,说明前面的座位一定坐不满,那么就代表着不合法

所以我们设\(f[i][j]\)表示编号为第\(i\)个位置及其之前的人数有\(j\)人的方案数
就可以枚举\(i\)号位坐了多少人进行转移了

我们记一个\(sum[i]\)数组表示固定编号\(<=i\)的人数
并且将没有固定编号的人数记为编号\(0\)

这样子一个位置可以坐的人数就在范围\([num[i],sum[i]]\)以内了,其中\(num[i]\)指固定编号为\(i\)的人数

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 305,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
int P,n,m;
LL C[maxn][maxn],f[maxn][maxn],sum[maxn],num[maxn];
void init(){memset(f,0,sizeof(f));memset(sum,0,sizeof(sum));memset(num,0,sizeof(num));C[0][0] = 1;for (int i = 1; i <= n; i++){C[i][0] = C[i][i] = 1;for (int j = 1; j <= (i >> 1); j++)C[i][j] = C[i][i - j] = (C[i - 1][j - 1] + C[i - 1][j]) % P;}
}
int main(){int T = read(),flag;while (T--){n = read(); m = read(); P = read(); flag = true;init(); sum[0] = n - m;for (int i = 1; i <= m; i++) read(),num[read()]++;for (int i = 1; i <= n; i++){sum[i] = sum[i - 1] + num[i];if (sum[i] < i) {flag = false; break;}}if (!flag){puts("NO"); continue;}f[0][0] = 1;for (int i = 1; i <= n; i++){for (int j = i; j <= sum[i]; j++){for (int k = num[i]; k <= j - i + 1; k++)f[i][j] = (f[i][j] + f[i - 1][j - k] * C[sum[i] - num[i] - (j - k)][k - num[i]] % P) % P;}}printf("YES %lld\n",f[n][n]);}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8881630.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 3_mysql3

回顾字段类型(列类型): 数值型, 时间日期型和字符串类型数值型: 整型和小数型(浮点型和定点型)时间日期型: datetime, date,time,timestamp, year字符串类型: 定长, 变长, 文件字符串(text和blob), 枚举和集合Mysql记录长度: 65535个字节, varchar达不到理论长度, NULL占用一个…

H5+App开发框架汇总

MUI&#xff1a;http://dcloudio.github.io/mui/&#xff08;使用H5app模式&#xff0c;号称是最接近原生&#xff0c;但是目前在手机和电脑浏览器无法使用&#xff09; app-framework&#xff1a;http://app-framework-software.intel.com/ &#xff08;有Android、iOS等主题样…

C#-interface

接口成员不能有访问修饰符&#xff0c;默认为public。接口成员只能给出签名&#xff0c;不能有具体实现。继承接口的类必须全部实现接口成员。接口是多继承的。实现继承的过程中&#xff0c;基类必须放在所有接口的最前面。接口不能实例化对象。接口是引用类型。转载于:https:/…

【Alpha阶段】第一次Scrum Meeting

PS&#xff1a;因为安装android的SDK插件出现问题&#xff0c;在eclipse和android studio中安装都不成功&#xff0c;项目不能运行&#xff0c;且一直在下载一些插件&#xff0c;安装了3天都没有成功&#xff0c;按照网上的解决办法进行解决都没有成功&#xff0c;导致项目不能…

mysql galera 下载_Mysql-Galera Cluster

使用Galera Cluster需要下载包含wsrep补丁的mysql版本&#xff1b;官网下载地址&#xff1a;http://galeracluster.com/downloads/安装前要卸载之前安装的mariadb或者mysql&#xff1b;或者迁移也可以&#xff0c;不过就是另一套操作了&#xff01;具体的安装过程官网描述的很完…

ext4fs error mysql_请教一个 Linux 挂在磁盘阵列报错 EXT4-fs error 问题

从昨天开始 linux 通过光纤直接连接磁盘阵列&#xff0c;会出现磁盘阵列掉了的情况&#xff0c;然后机器会重启&#xff0c;本来重启后&#xff0c;rose ha 会自动挂载磁盘阵列&#xff0c;现在由于 rose ha 也出了点问题&#xff0c;导致不切换备用服务器&#xff0c;主服务器…

hashtable和hashmap的区别?

相同点&#xff1a; 1.都实现了map接口 2.都是键值对的方式存储 3.都是通过单链表解决冲突的 4. 都实现了Serializable接口和Cloneable接口&#xff0c;因此它支持序列化和被克隆。 不同点&#xff1a; 1.hashtable不支持键-值为null,而hashmap支持。 2.hashmap是线程不安全&am…

mysql数据库的各种锁_关于MySQL各类锁的总结

想要用好 MySQL&#xff0c;索引与锁是一个绕不开的话题。最近一直在维护以前的业务系统&#xff0c;线上频繁报出数据库死锁的异常警告&#xff0c;为了排查以及规避死锁的问题&#xff0c;因此对 MySQL 的锁(Innodb引擎)做了一个比较深入学习&#xff0c;顺便加深自己对 MySQ…

581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况

&#xff3b;抄题&#xff3d;&#xff1a; Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to find the shortest suc…

python enumerate函数返回值_python中enumerate函数用法实例分析

本文实例讲述了python中enumerate函数用法。分享给大家供大家参考。具体分析如下&#xff1a;今日发现一个新函数 enumerate 。一般情况下对一个列表或数组既要遍历索引又要遍历元素时&#xff0c;会这样写&#xff1a; for i in range (0,len(list)):print i ,list[i]但是这种…

Java异常处理原则与技巧总结

一 处理原则 Java异常代码中我们使用异常的目的是让异常的异常类型来提示“什么”被抛出了--- 即出了什么问题&#xff1b;用异常的栈打印信息来跟踪异常在“哪里”抛出 --- 即哪里出了问题&#xff1b; 异常提示信息来提示“为什么”会抛出 --- 即出问题的原因。在对异常进行…

python三阶魔方_三阶魔方自动求解及动态可视化matlab代码

三阶魔方自动求解及动态可视化matlab代码思路与步骤三阶魔方有6个面&#xff0c;每个面有333\times333小块&#xff0c;用一个6336\times3\times3633的矩阵来保存魔方的状态&#xff1b;定义412种魔方旋转行为&#xff1a;整体旋转(左右上下共4种方式AaCc)&#xff0c;侧面(6个…

Qt 常用类——QStandardItemModel

转载&#xff1a;落叶知秋时 类QabstractItemModel&#xff0c;QabstractListModel&#xff0c;QAbstractTableModel不保存数据&#xff0c;用户需要从这些类派生出子类&#xff0c;并在子类中定义某种数据结构来保存数据。 与此不同&#xff0c;类QStandardItemModel负责保存数…

thinkphp mysql 中文_耗时5天解决thinkphp连接mysql中文乱码的问题

坑大&#xff0c;或者不大&#xff0c;它就在那里&#xff0c;等着你进。先前修改成熟的一个基于thinkphp3.1.2的后台框架&#xff0c;里面有我的autoCode&#xff0c;本来在新项目上不想再用这么落后的版本&#xff0c;但考虑到后台项目不对外使用&#xff0c;重点是autoCode是…

bzoj3203: [Sdoi2013]保护出题人

我三分这么好吗居然1A啦&#xff1f;&#xff1f;&#xff1f;提交的时候只是想着先WA一次的。。。。 这题真的很妙啊 首先第一步&#xff0c;就是把僵尸的生命值取一个前缀和&#xff0c;这样造成伤害的时候&#xff0c;可以视为同时对所有僵尸造成伤害。 那么就可以得到一个柿…

ad19原理图标注_AD19中原理图的模板如何进行编辑?

我们在进行原理图设计的时候&#xff0c;有时候不想去用软件自带默认的模板&#xff0c;想要用自己设计的模板&#xff0c;就涉及到我们的模板怎么去编辑的呢&#xff1f;我们应该如何去编辑原理图自己设计的模板&#xff1f;操作步骤是怎么的呢&#xff1f;我们今天就以AD19为…

mysql+秘密_mysql不被人知的秘密

http://blog.csdn.net/yueguanghaidao/article/details/69333872011先建立两张表。1.student表2.grade表一&#xff1a;mysql的复制技术1.表与数据的复制->>实现表结构和数据的同步create table desttable select * from srctable;(desttable:目标表&#xff0c;srctable…

项目管理中风险评价的必要性

摘要&#xff1a;在项目管理实践中&#xff0c;风险是时时存在的。 因此&#xff0c;如何评价、度量风险的大小&#xff0c;确定可接受风险和不可接受风险&#xff0c;对不可接受风险作进一步分析&#xff0c;制定补偿措施&#xff0c;将风险减至最小或可以接受的水平&#xff…

mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?

背景及目标&#xff1a;现有数据1000w单表&#xff0c;为压力测试准备1亿条数据。步骤&#xff1a;1.将1000w条记录&#xff0c;除id外都导入到多个文件中&#xff1a;//DELIMITERDROP PROCEDURE if EXISTS createManyTable;create PROCEDURE createManyTable()BEGINDECLARE i …

windows键盘在mac上怎么识别_Mac电脑怎么使用pc键盘?

苹果电脑一般需要使用配套的mac键盘&#xff0c;毕竟按键和普通pc键盘不一样。但是总会遇到一些情况&#xff0c;比如配套的mac键盘坏了&#xff0c;而刚好有一个pc键盘&#xff0c;那么这时候苹果电脑要怎么用pc键盘呢&#xff1f;这边小编跟大家介绍mac电脑连接pc键盘以及设置…