BZOJ 2302: [HAOI2011]Problem c(数学+DP)
题面: bzoj_2302
题解:
令\(dp[i][j]\)表示编号 \(\leq i\)的人有j个的方案数;
\(cnt[i]\)表示编号指定为\(i\)的人数,\(sum[i]\)表示编号可以\(\leq i\)的人数
有转移方程
\]
P.S. 组合数表示现在有\(sum[i]\)个人,\(cnt[i]\)个人已经确定必须选,\(j-k\)个人已经选完了,在剩下的人中选出\(k-cnt[i]\)个人使其编号为\(i\)
#include<bits/stdc++.h>
using namespace std;
namespace Tzh{
typedef long long ll;
const int maxn=310;
ll dp[maxn][maxn],sum[maxn],cnt[maxn],c[maxn][maxn],n,m,p,T;
void init(){c[0][0]=1;
for(int i=1;i<=n;i++){c[i][0]=1;
for(int j=1;j<=i;j++)
c[i][j]=(c[i-1][j-1]+c[i-1][j])%p;
}
memset(cnt,0,sizeof(cnt));
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
}
void work(){
scanf("%d",&T);
while(T--){ int x;
scanf("%d%d%d",&n,&m,&p);init(); sum[0]=n-m;
for(int i=1;i<=m;i++) scanf("%*d%d",&x),cnt[x]++;
for(int i=1;i<=n;i++){
sum[i]=sum[i-1]+cnt[i];
if(sum[i]<i){
puts("NO"); goto end;
}
} dp[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=sum[i];j>=i;j--)
for(int k=cnt[i];k<=j-i+1;k++)
dp[i][j]=(dp[i][j]+dp[i-1][j-k]*c[sum[i]-cnt[i]-j+k][k-cnt[i]]%p)%p;
printf("YES %lld\n",dp[n][n]); end:;
}
}
}
int main(){
Tzh::work();
return 0;
}
BZOJ 2302: [HAOI2011]Problem c(数学+DP)的更多相关文章
- BZOJ 2302: [HAOI2011]Problem c( dp )
dp(i, j)表示从i~N中为j个人选定的方案数, 状态转移就考虑选多少人为i编号, 然后从i+1的方案数算过来就可以了. 时间复杂度O(TN^2) ------------------------ ...
- BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
2302: [HAOI2011]Problem c Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 648 Solved: 355[Submit][S ...
- bzoj 2302: [HAOI2011]Problem c
Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了, ...
- 【BZOJ 2298】 2298: [HAOI2011]problem a (DP)
2298: [HAOI2011]problem a Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1326 Solved: 637 Descript ...
- BZOJ 2298: [HAOI2011]problem a 动态规划
2298: [HAOI2011]problem a Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...
- BZOJ 2301: [HAOI2011]Problem b (莫比乌斯反演)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 436 Solved: 187[Submit][S ...
- Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x, ...
- bzoj 2301: [HAOI2011]Problem b
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 3757 Solved: 1671 [Submit] ...
- BZOJ 2301: [HAOI2011]Problem b 莫比乌斯反演
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 1007 Solved: 415[Submit][ ...
随机推荐
- Java笔记(day11)
异常:是在运行时期发生的不正常情况. 异常类:在java中用类的形式对不正常情况进行了描述和封装对象,描述不正常的情况的类. 异常就是java通过面向对象的思想将问题封装成了对象.用异常类对其进行描述 ...
- springMVC实现增删改查
首先需要准备好一张数据库表我这里用emp这张表:具体代码: /* SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.1.73-community ************* ...
- 硬杠后端(后端坑系列)——Django前期工作
Django是一个开放源代码的Web应用框架,由Python写成,采用了MVC的框架模式. MVC MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件 ...
- ArcGIS API for JavaScript与 npm
在4.7版本中,不仅增加了WebGL的渲染支持(渲染前端速度加快,渲染量也加大).增强了ES6中的Promises语法支持,还支持了npm管理及webpack打包,实属喜讯. “意味着可以不经过esr ...
- ThreadLocal说明
ThreadLocal说明 类ThreadLocal主要为了解决每个线程绑定自己的私有的值,可以吧ThreadLocal比如可全部存放的数据,每个线程都可以在里面存放自己的数据,并且不会和其他线程冲突 ...
- fastjson SerializerFeature详解
- memcached架构及缓存策略
----------------------------------------概述---------------------------------------- Memcached是一套高性能分布 ...
- selenium跳过webdriver检测并模拟登录淘宝
目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 模拟登录淘宝已经不是一件新鲜的事情了,过去我曾经使用get/post方式进行爬虫,同时也加入IP代理池进行跳过检验,但随着大型网 ...
- clipboardjs复制到粘贴板
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- linux安装redis操作
redis官网地址:http://www.redis.io/ 最新版本:2.8.3 在Linux下安装Redis非常简单,具体步骤如下(官网有说明): 1.下载源码,解压缩后编译源码. $ wget ...