洛谷 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 ...
随机推荐
- 你被美国监控了,美国监控丑闻——"棱镜项目"事件
http://www.ittime.com.cn/index.php?m=content&c=index&a=show&catid=29&id=3795 “棱镜”项目所 ...
- jquery遍历DOM方法总结
1.jQuery 遍历 - 祖先 向上遍历 DOM 树 这些 jQuery 方法很有用,它们用于向上遍历 DOM 树: parent() parents() parentsUntil() jQuery ...
- Service(1)
服务是一个应用组件,能够在后运行耗时的操作,不提供一个用户界面.(由于不提供界面,所以能够耗时运行,和活动最大的不同).还有一个应用组件能够启动一个服务,服务会继续在后台运行及时用户切换到还有一个应用 ...
- Linux 查看CPU个数和磁盘个数
top后按数字1,多个cpu的话会显示多个 fdisk -l可以看到多个物理硬盘,做了硬raid只能看到一个硬盘 cat /proc/cpuinfo查看cpu具体的信息
- 无序列表li横向排列
一.横向两列方式排列: 在网页中,很多地方都会用到无序列表横向排列的形式,通常的写法都是使得li的css样式设置为:float:left的形式即可,li会依次从最左边开始并列对齐, 例如: HTML中 ...
- C++语言基础(13)-抽象类和纯虚函数
一.基本语法 在C++中,可以将虚函数声明为纯虚函数,语法格式为: ; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数. 最后的=0并不表示函数返回值为0,它只起形 ...
- libevent源码学习_event_test
对应的sample文件中提供了event_test.c,里面就是关于事件的简单示例,具体如下: /* * Compile with: * cc -I/usr/local/include -o even ...
- C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 2
Chapter 2.1 1. 数据类型决定了程序中数据和操作的意义. 2. C++定义了一套基本数据类型,其中包括算术类型和一个名为void的特殊类型.算术类型包含了字符.整型.布尔值以及浮点数.vo ...
- C# 委托和Lambda表达式
看了一些资料,简要的总结一下委托,Lambda,事件. 委托. 1)委托的含义 委托定义了函数类型,是一种类似“C++函数指针”的东西. 但委托和函数指针还是不同的,函数指针不过是一个函数的入口地址( ...
- 谁是云的王者?OpenStack与VMware优劣对比
[编者按]在云计算生态系统中,有两种类型的用户需要使用云计算资源:传统型(Traditional IT applications)和在互联网大潮下逐渐崛起云计算应用型(Cloud-aware appl ...