bzoj2302-Problem c
题意
有 \(n\) 个人,从 1 到 \(i\) 编号。给每个人一个值 \(a_i\) ,他们会按编号从小到大进行如下操作:查看 \(a_i\) 有没有人,若没有就坐进去,否则查看 \(a_i+1\) ……
按照这个方法,若一个人没地方坐,那么这个方案不合法。现在给定一部分人的 \(a_i\) ,对剩下的人有多少种分配 \(a\) 的合法方案。\(n\le 300\) 。
分析
可以看 这篇题解 。
对奇怪的问题,要找出简单的等价形式
观察一下这个摆放方法,可以发现,若标号大于等于 \(x\) 的个数大于 \(n-x+1\) ,那么一定是不可行的,因为每个人只会往后走。更好看的形式是,若标号小于等于 \(x\) 的个数大于等于 \(x\) ,那么这个方案可行。
必要性显然。下面说明充分性。设满足上述条件的情况下 \(x\) 没有地方坐,那就说明值大于等于 \(a_x\) 的至少有 \(n-a_x+2\) 个,与满足上述要求矛盾。因此标号小于等于 \(x\) 的个数大于等于 \(x\) 等价于有合法解。
那么我们dp这个东西就行啦!
设 \(f[i][j]\) 表示有 \(j\) 个人的值在 \([1,i]\) 中的方案数,显然有转移
\]
考虑上已经钦定的人,就是将总可选人数减少,要求改为 \(i\) 之前的至少有 \(j-p_i\) 个,其中 \(p_i\) 为钦定选 \(i\) 之前的个数前缀和。
复杂度为 \(O(n^3)\) 。
代码
#include<bits/stdc++.h>
#define M(x) memset(x,0,sizeof x)
using namespace std;
typedef long long giant;
inline int read() {
int x=0,f=1;
char c=getchar();
for (;!isdigit(c);c=getchar()) if (c=='-') f=-1;
for (;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int maxn=301;
int n,m,b[maxn],f[maxn][maxn],q,c[maxn][maxn],suf[maxn];
inline int Plus(int x,int y) {return ((giant)x+(giant)y)%q;}
inline void Pe(int &x,int y) {x=Plus(x,y);}
inline int Multi(int x,int y) {return (giant)x*y%q;}
inline void work() {
n=read(),m=read(),q=read();
M(f),M(b),M(c),M(suf);
c[0][0]=1;
for (int i=1;i<maxn;++i) for (int j=c[i][0]=1;j<=i;++j) c[i][j]=Plus(c[i-1][j],c[i-1][j-1]);
for (int i=1;i<=m;++i) read(),++b[read()];
for (int i=n;i;--i) if ((suf[i]=suf[i+1]+b[i])>n-i+1) {puts("NO");return;}
for (int i=1;i<=n;++i) b[i]+=b[i-1];
f[0][0]=1;
for (int i=1;i<=n;++i) {
for (int j=0;j<=n;++j) for (int k=0;k<=j;++k) Pe(f[i][j],Multi(f[i-1][k],c[n-m-k][j-k]));
for (int j=0;j<i-b[i];++j) f[i][j]=0;
}
printf("YES %d\n",f[n][n-m]);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
for (int T=read();T--;) work();
return 0;
}
bzoj2302-Problem c的更多相关文章
- 【BZOJ2302】[HAOI2011]Problem C(动态规划)
[BZOJ2302][HAOI2011]Problem C(动态规划) 题面 BZOJ 洛谷 题解 首先如果\(m=0\)即没有特殊限制的话,那么就和这道题目基本上是一样的. 然而这题也有属于这题的性 ...
- [bzoj2302][HNOI2011]problem c 递推,dp
[HAOI2011]Problem c Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 949 Solved: 519[Submit][Status] ...
- BZOJ2302 [HAOI2011]Problem c
Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了, ...
- BZOJ2302 [HAOI2011]Problem c 【dp】
题目 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,a ...
- 1199 Problem B: 大小关系
求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...
- No-args constructor for class X does not exist. Register an InstanceCreator with Gson for this type to fix this problem.
Gson解析JSON字符串时出现了下面的错误: No-args constructor for class X does not exist. Register an InstanceCreator ...
- C - NP-Hard Problem(二分图判定-染色法)
C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144 ...
- Time Consume Problem
I joined the NodeJS online Course three weeks ago, but now I'm late about 2 weeks. I pay the codesch ...
- Programming Contest Problem Types
Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...
- hdu1032 Train Problem II (卡特兰数)
题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能. (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...
随机推荐
- X5webview去掉分享功能和缓存功能
x5webview比原生的webview适配更好,加载更快,对音视频的兼容性更好,具备独特的优势 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使 ...
- TCP/IP理解
目录 1.概述 2.TCP/IP寻址及其协议族 3.TCP/IP 邮件 1.概述 介绍:什么是TCP/IP? TCP/IP协议是对计算机必须遵守的规则的描述,遵守了规则才能通信. 应用: 浏览器与服务 ...
- C#单例模式初识
设计模式之单例模式 定义: 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 要素: 私有的构造函数(防止外部实例化) 指向自己实例的私有静态引用 以自己实例为返回值的静态公有方法或者 ...
- 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- ubuntu/linux中安装Tomcat(附图解详细步骤)
我的linux系统使用的是ubuntu14 1.首先需要先到Tomcat官网上下载对应linux系统的压缩包,可以直接在Ubuntu系统中进行下载,下载后的默认路径为主文件夹路径下的下载文件目录下 注 ...
- 前端基础css
CSS主要学习的是选择器和样式属性. 导入css的方式:行内样式,内部样式,外部样式(推荐使用) 行内样式:在标记的style属性中设定CSS样式 <p style="color: g ...
- 服务发现与消费 --> Spring Cloud Eureka
在上两篇文章中,我们已经搭建起微服务架构中的核心组件 服务注册 中心(包括单节点模式和高可用模式).同时, 还对上一章中实现的Spring Boot入门程序 做了改造. 通过简单的配置,使该程序注册到 ...
- selenium 基本常用操作
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChains #鼠标操作 ...
- 【翻译】HOG, Histogram of Oriented Gradients / 方向梯度直方图 介绍
本文翻译自 SATYA MALLICK 的 "Histogram of Oriented Gradients" 原文链接: https://www.learnopencv.com/ ...
- Netty源码分析第7章(编码器和写数据)---->第1节: writeAndFlush的事件传播
Netty源码分析第七章: 编码器和写数据 概述: 上一小章我们介绍了解码器, 这一章我们介绍编码器 其实编码器和解码器比较类似, 编码器也是一个handler, 并且属于outbounfHandle ...