洛谷 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 ...
随机推荐
- Java之旅(2)—反射
1. 概念 反射就是将java类中的各种成分映射成对应的java类.之前我们已经讲过了Class类,也明确了一个java类中用一个Class类的对象来表示,一个类中的组成部分有:成员变量,方法 ...
- ActiveMQ与MSMQ的异同
http://www.cnblogs.com/luluping/archive/2010/11/03/1867841.html 目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于 ...
- AspectJ 是什么
http://www.blogjava.net/hwpok/archive/2008/06/28/211312.html 1. 序 Aspect Oriented Programming (AOP)是 ...
- Cannot find module 'webpack'
执行webpack命令报错 Error: Cannot find module 'webpack' at Function.Module._resolveFilename (module.js:325 ...
- seo-mask -- 为单页应用创建一个适合蜘蛛爬取的seo网站
seo-mask seo-mask是利用搜索引擎蜘蛛的爬取原理(蜘蛛只会爬取网页的内容,并不会关心解析网页里的css和js),制作一套专门针对seo的镜像网站,鄙人称它为针对seo的mask,让蜘蛛看 ...
- android学习十三(android的通知使用)
通知(Notification)是android系统中比較有特色的一个功能,当某个应用程序希望向用户发出一些提示信息.而该应用程序又不在前台执行时,就能够借助通知来实现.发出一条通知后,手机最上方的状 ...
- UML类图详解_组合关系
组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...
- 【转载】使用SoapUI 测试Web Service
转载地址:使用SoapUI 测试Web Service 如何测试写好的Webservice?你当然可以写代码来测试,但还是太麻烦,你得花时间去学习各语言的关于Webservice调用的相关API. ...
- Anaconda+Tensorflow环境安装与配置(转载)
Anaconda+Tensorflow环境安装与配置 转载请注明出处:http://www.cnblogs.com/willnote/p/6746499.html Anaconda安装 在清华大学 T ...
- centos6.5下redis的安装与配置
参照官网描述(https://redis.io/download),linux下redis安装步骤如下: $ wget http://download.redis.io/releases/redis- ...