洛谷 P2523 [HAOI2011]Problem c
这一题我是想不出来,
但是我想吐槽一下坐我左边的大佬。
大佬做题的时候,只是想了几分钟,拍了拍大腿,干脆的道:“这不是很显然吗!”
然后灵动地轻击键盘,不时抚弄头发,光速切紫题。
AC后笑眯眯地对我说,
你要是想的出来,我给你买一瓶2L可口可乐!不是在打广告~
我当然难以下手,但2L杀***水非常诱惑。
还是冥思苦想了一番,
大佬看着着急,就告诉了我状态定义,还笑着说,告诉你你也想不出方程。
我很生气,但身为蒟蒻又能怎样呢?
在大佬的不断提示下,我勉强把这题做了出来。
讲讲怎么做吧~
先看这题怎么样才算无解呢,
假设\(cnt[i]\)表示\(m\)个人中编号\(\ge i\)的个数。显然当\(cnt[i]>=n-i+1\)时无解。
大佬叫我这样定义状态\(f[i][j]\)表示剩下\(n-m\)个人中编号\(\ge i\)的人有\(j\)个。
所以,我们这么转移\(f[i][j]+=f[i+1][j-k]*C_{j}^{k}\)。
表示我们此时已经选了\(j-k\)人,再选\(k\)人的方案数。
注意事项:这是大佬的提醒~
因为方程是从\(i+1\)转移过来的,所以我们的\(i\)要倒过来枚举,答案显然是\(f[1][n-m]\)。
复杂度显然\(O(n^3)\),当然还要乘上数据组数。
上代码~
#include <bits/stdc++.h>
using namespace std;
typedef int _int;
#define int long long
int n,m,mo,cnt[301],f[301][301];
int yh[301][301];
void pre()
{
for (int i=0;i<=n;++i) yh[i][0]=1;
for (int i=1;i<=n;++i) {
for (int j=1;j<=i;++j) {
yh[i][j]=yh[i-1][j-1]+yh[i-1][j];
yh[i][j]%=mo;
}
}
}
_int main()
{
int T;cin>>T;
while (T--) {
memset(f,0,sizeof(f));
memset(cnt,0,sizeof(cnt));
int x,y,flag=0;
cin>>n>>m>>mo;
for (int i=1;i<=m;++i) {
cin>>x>>y;
++cnt[y];
}
for (int i=n;i;--i) {
cnt[i]+=cnt[i+1];
if (cnt[i]+i>n+1) {flag=1;break;}
}
if (flag) {puts("NO");continue;}
pre();
f[n+1][0]=1;int i,j,k;
for (i=n;i;--i)
for (j=0;j+i+cnt[i]<=n+1;++j)
for (k=0;k<=j;++k)
f[i][j]+=(f[i+1][j-k]*yh[j][k]),f[i][j]%=mo;
cout<<"YES "<<f[1][n-m]<<endl;
}
return 0;
}
洛谷 P2523 [HAOI2011]Problem c的更多相关文章
- 洛谷P2523 [HAOI2011]Problem c(计数dp)
题面 luogu 题解 首先,显然一个人实际位置只可能大于或等于编号 先考虑无解的情况 对于编号为\(i\),如果确认的人编号在\([i,n]\)中数量大于区间长度,那么就无解 记\(S[i]\)表示 ...
- 洛谷$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的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
- 洛谷$P$2522 $Problem\ b\ [HAOI2011]$ 莫比乌斯反演
正解:莫比乌斯反演 解题报告: 传送门! 首先看到这个显然就想到莫比乌斯反演$QwQ$? 就先瞎搞下呗$QwQ$ $gcd(x,y)=k$,即$gcd(\left \lfloor \frac{x}{k ...
随机推荐
- Windows外壳名字空间的浏览
Windows95/98对Dos/Win3.x作了许多重大改进,在文件系统方面,它除了采用长文件名替代Dos中的8.3文件名以外,引入外壳名字空间(Shell Name Space)来代Dos文件系统 ...
- 转MQTT SERVER 性能测试报告
硬件环境: 内存4G CPU4核 SERVER及端口: apollo端口 61619 mosquitto:端口 1884 activeMQ端口:1883 emqtt 端口1885 测试方法 并发测试: ...
- 使用NPOI读取Excel出错
使用NPOI读取Excel出错,错误信息:java.io.IOException: Invalid header signature; read 4503608217567241, expected ...
- CentOS6.5配置PHP CI程序
步骤: 1.安装CentOS6.5系统: 1.选择PHP+Mysql环境 2.关闭防火墙和SeLinux 1.chkconfig --level 35 iptables off ...
- curl 重定向问题
今天在curl一个网站的时候遇到一个奇怪的问题,下面是输出: lxg@lxg-X240:~$ curl -L http://www.yngs.gov.cn/ -v * Hostname was NOT ...
- poj 2828 Buy Tickets (线段树 单节点 查询位置更新)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 15533 Accepted: 7759 Desc ...
- RHEL 7 安装MariaDB
RedHat Enterprise Linux 7開始.系统盘中自带的数据库为MariaDB,安装的过程例如以下: 1. 挂载安装盘镜像:mount /dev/cdrom /mnt 2. 创建yum源 ...
- RAD Studio XE5破解补丁及方法
通过测试可用,RAD Studio XE5破解补丁及方法 第一步,将下载下来的“delphicbuilder_xe5_win.iso”解压到任意盘,任意目录. 第二步,将“免序列号安装授权文件”文件夹 ...
- swoole-1.7.18 版本已发布,支持 PHP7
swoole-1.7.18 版本已发布,支持 PHP7 matyhtf 发布于: 2015年07月23日 (22评) 分享到: 收藏 +16 3月19日,深圳源创会火热报名中,go>> ...
- Hash索引和BTREE索引2
索引是数据库中用来提高性能的最常用工具.所有MySql列类型都可以被索引.索引用于快速找出在某个列中有一特定值的行.如果不使用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行.常用的 ...