洛谷P2523 [HAOI2011]Problem c(计数dp)
题面
题解
首先,显然一个人实际位置只可能大于或等于编号
先考虑无解的情况
对于编号为\(i\),如果确认的人编号在\([i,n]\)中数量大于区间长度,那么就无解
记\(S[i]\)表示确认的人编号在\([i,n]\)中数量
我们只要考虑剩下的\(n - m\)人
\(f[i][j]\)表示编号\(>=i\)的,已经确认了\(j\)人
那么我们枚举多少人编号为\(i\)
\(f[i][j] = \sum f[i + 1][j - k] * (^j_k)\)
因为交换一些人的编号也是可行方案,所以乘上一个组合数
Code
#include<bits/stdc++.h>
#define LL long long
#define RG register
using namespace std;
template<class T> inline void read(T &x) {
x = 0; RG char c = getchar(); bool f = 0;
while (c != '-' && (c < '0' || c > '9')) c = getchar(); if (c == '-') c = getchar(), f = 1;
while (c >= '0' && c <= '9') x = x*10+c-48, c = getchar();
x = f ? -x : x;
return ;
}
template<class T> inline void write(T x) {
if (!x) {putchar(48);return ;}
if (x < 0) x = -x, putchar('-');
int len = -1, z[20]; while (x > 0) z[++len] = x%10, x /= 10;
for (RG int i = len; i >= 0; i--) putchar(z[i]+48);return ;
}
const int N = 310;
int n, m, Mod, s[N], f[N][N], C[N][N];
void pls(int &x, int y) {
x += y;
if (x >= Mod) x -= Mod;
}
void solve() {
read(n), read(m), read(Mod);
for (int i = 0; i <= 300; i++) C[i][0] = C[i][i] = 1;
for (int i = 2; i <= 300; i++)
for (int j = 1; j < i; j++)
C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % Mod;
memset(s, 0, sizeof(s));
for (int i = 1, x; i <= m; i++) read(x), read(x), s[x]++;
for (int i = n; i; i--) s[i] += s[i + 1];
bool flag = 0;
for (int i = 1; i <= n; i++)
if (s[i] > n - i + 1) {
flag = 1;
break;
}
if (flag) {
puts("NO");
return ;
}
memset(f, 0, sizeof(f));
f[n + 1][0] = 1;
for (int i = n; i; i--)
for (int j = 0; j <= n - i + 1 - s[i]; j++)
for (int k = 0; k <= j; k++)
pls(f[i][j], 1ll * f[i + 1][j - k] * C[j][k] % Mod);
printf("YES %d\n", f[1][n - m]);
return ;
}
int main() {
int T;
read(T);
while (T--) solve();
return 0;
}
洛谷P2523 [HAOI2011]Problem c(计数dp)的更多相关文章
- 洛谷 P2523 [HAOI2011]Problem c
洛谷1或洛谷2,它们是一样的题目,手动滑稽- 这一题我是想不出来, 但是我想吐槽一下坐我左边的大佬. 大佬做题的时候,只是想了几分钟,拍了拍大腿,干脆的道:"这不是很显然吗!" 然 ...
- 洛谷$P2523\ [HAOI2011]\ Problem\ c$ $dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 首先港下不合法的情况.设$sum_i$表示$q\geq i$的人数,当且仅当$sum_i>n-i+1$时无解. 欧克然后考虑这题咋做$QwQ$. 一 ...
- 洛谷P2522 - [HAOI2011]Problem b
Portal Description 进行\(T(T\leq10^5)\)次询问,每次给出\(x_1,x_2,y_1,y_2\)和\(d\)(均不超过\(10^5\)),求\(\sum_{i=x_1} ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
传送门 我们考虑容斥,设$ans(a,b)=\sum_{i=1}^a\sum_{j=1}^b[gcd(a,b)==k]$,这个东西可以和这一题一样去算洛谷P3455 [POI2007]ZAP-Quer ...
- 洛谷P2522 [HAOI2011]Problem b (莫比乌斯反演+容斥)
题意:求$\sum_{i=a}^{b}\sum_{j=c}^{d}[gcd(i,j)==k]$(1<=a,b,c,d,k<=50000). 是洛谷P3455 [POI2007]ZAP-Qu ...
- 洛谷 P2519 [HAOI2011]problem a
传送门 考虑转化为求最多说真话的人数 设$f(i)$表示排名前$i$的人中最多说真话的人的数量,考虑转移,如果由$j$转移而来,可以设$[j,i]$之间的人全都分数相等,那么式子就是$f[i]=f[j ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- 洛谷 P2522 [HAOI2011]Problem b (莫比乌斯反演+简单容斥)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
随机推荐
- Pwdump v7.1
提取windows系统密码 和 hash值
- 使用cmd命令登录mysql数据库时报2013-Lost connection to MYSQL server at 'waiting for initial communication packet',system error:0
[错误内容]:SQL Error (2013): Lost connection to MySQL server at 'waiting for initial communication packe ...
- BPNN
链接网址:http://blog.csdn.net/heyongluoyao8/article/details/48213345 BPNN 人工神经网络 我们知道,人的脑袋具有很强的学习.记忆.联 ...
- C++ 数据封装和抽象
C++ 数据抽象 数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节. 数据抽象是一种依赖于接口和实现分离的编程(设计)技术. 让我们举一个现实生活中的真实例子 ...
- Linux 基础教程 36-查看系统性能
uptime uptime命令功能比较简单,主要功能如下所示: 查看服务器的开机时长 查看CPU负载 基本用法 uptime 用法示例 [root@localhost ~]# uptime 1 ...
- 寻找最大的K个数(上)
这是一道很经典的题目,有太多方法了,今天写了两种方法,分别是快排和堆排序 #include <iostream> using namespace std; #define N 25 //初 ...
- Sqler-Monitor
针对Sqler Monitor 功能做了整理 ##SqlServices ## Cluster. Alwayson Single ##Replicaion ##: 1:undelivedcmds mo ...
- nmon在secureCRT下显示乱码问题
# 背景 下载安装了nmon,结果发现显示有问题,如下 # 解决 猜测应该是字体编码问题,查阅了解后,是因为CRT设置问题,需要修改下配置,(之前试用xshell比较棒,但公司禁止试用),如下修改 然 ...
- SQL 从数据库中随机取n条数据
用NEWID()方法. * ,NEWID() AS random from [toblename] order by random 其中的1可以换成其他任意整数,表示取的数据条数
- 2:C#TPL探秘
理论: 1. 只要方法是 Task类型的返回值,都可以用 await 来等待调用获取返回值. 2. 如果一个返回 Task类型的方法被标记了 async,那么只要方法内部直接 return T 这个 ...