BZOJ 2302 HAOI2011 Problem c 动态规划
来源:互联网 发布:手绘头像软件 编辑:程序博客网 时间:2024/05/17 19:21
题目大意:给定
现在已经确定了一些
一个序列合法等价于编号
然后就可以DP辣。。。
令
那么有
那个组合数表示现在有
时间复杂度
少打个回车调了一晚上……我真是老了啊……
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 330using namespace std;int n,m,p;int cnt[M],sum[M];long long C[M][M],f[M][M];void Initialize(){ int i,j; memset(cnt,0,sizeof cnt); memset(C,0,sizeof C); memset(f,0,sizeof f); for(i=0;i<=n;i++) for(C[i][0]=1,j=1;j<=i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%p;}int main(){ int T,i,j,k,x; for(cin>>T;T;T--) { cin>>n>>m>>p; sum[0]=n-m; Initialize(); for(i=1;i<=m;i++) scanf("%*d%d",&x),cnt[x]++; for(i=1;i<=n;i++) { sum[i]=sum[i-1]+cnt[i]; if(sum[i]<i) { puts("NO"); break; } } if(i!=n+1) continue; f[0][0]=1; for(i=1;i<=n;i++) for(j=sum[i];j>=i;j--) for(k=j-i+1;k>=cnt[i];k--) (f[i][j]+=f[i-1][j-k]*C[sum[i]-j+k-cnt[i]][k-cnt[i]])%=p; printf("YES %d\n",(int)f[n][n]); } return 0;}
1 0
- BZOJ 2302 HAOI2011 Problem c 动态规划
- 【53.61%】【BZOJ 2302】[HAOI2011]Problem c
- BZOJ 2302([HAOI2011]Problem c-组合数学)
- bzoj 2302: [HAOI2011]Problem c dp+数学
- bzoj 2302: [HAOI2011]Problem c(DP)
- BZOJ2302: [HAOI2011]Problem c|动态规划|组合数学
- [HAOI2011][BZOJ2302] problem C 组合数+动态规划
- 2302: [HAOI2011]Problem c
- 【BZOJ2298】【HAOI2011】problem a 动态规划
- bzoj 2298: [HAOI2011]problem a
- BZOJ 2301: [HAOI2011]Problem b
- bzoj 2301: [HAOI2011]Problem b
- 【BZOJ 2301】 [HAOI2011]Problem b
- BZOJ 2298 [HAOI2011]problem a
- bzoj 2301: [HAOI2011]Problem b
- Problem b [Bzoj 2301,HAOI2011]
- bzoj 2301: [HAOI2011]Problem b
- BZOJ 2301: [HAOI2011]Problem b
- IP协议头格式分析
- [leetcode] 228.Summary Ranges
- iOS应用程序生命周期
- LeetCode题解:Balanced Binary Tree
- 8-26
- BZOJ 2302 HAOI2011 Problem c 动态规划
- zoj2156 Charlie's Change 完全背包+路径记录
- printf函数参数压栈顺序
- String 、 StringBuffer
- IplImage的相关知识
- 关于最大费用最大流的一类问题 【小谈】
- JVM之ClassLoader
- for循环输出<菱形、金字塔>
- C++ 中 dynamic_cast 使用(二)