BZOJ3294: [Cqoi2011]放棋子
来源:互联网 发布:2015中国财政支出数据 编辑:程序博客网 时间:2024/04/28 11:31
一开始一直以为可以不放完棋子…
n、m都不大,可以考虑DP
因为每行、每列只能放一种颜色的棋子,所以考虑把棋盘独立成n行m列,将这些行和列分给每种颜色的棋子
定义:
求
然后
tips:最后输出答案要计算未占满所有行列的情况
code:
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long long#define lowbit(x) x&(-x) using namespace std;const int maxn = 32;const int maxk = 12;const int maxm = 910;const ll Mod = 1e9+9;int n,m,N,v[maxn];ll c[maxm][maxm];ll f[maxn][maxn],g[maxk][maxn][maxn];int main(){ c[0][0]=1; for(int i=0;i<maxm;i++) { c[i][0]=1; for(int j=1;j<=i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%Mod; } scanf("%d%d%d",&n,&m,&N); for(int i=1;i<=N;i++) scanf("%d",&v[i]); g[0][0][0]=1ll; for(int k=1;k<=N;k++) { for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)f[i][j]=0ll; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(i*j>=v[k]) { f[i][j]=c[i*j][v[k]]; for(int x=1;x<=i;x++) for(int y=1;y<=j;y++) { if(x==i&&y==j) break; if(f[x][y]) (f[i][j]-=f[x][y]*c[i][x]%Mod*c[j][y]%Mod)%=Mod; } } } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { for(int x=1;x<=i;x++) for(int y=1;y<=j;y++) if(f[x][y]) (g[k][i][j]+=g[k-1][i-x][j-y] *f[x][y]%Mod*c[i][x]%Mod*c[j][y]%Mod)%=Mod; } } ll ret=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) (ret+=g[N][i][j]*c[n][i]%Mod*c[m][j]%Mod)%=Mod; printf("%lld\n",ret); return 0;}
0 0
- BZOJ3294: [Cqoi2011]放棋子
- BZOJ3294: [Cqoi2011]放棋子
- bzoj3294 [Cqoi2011]放棋子
- bzoj3294: [Cqoi2011]放棋子 容斥原理
- 【BZOJ3294】[Cqoi2011]放棋子【计数DP】
- 【BZOJ3294】放棋子(CQOI2011)-DP+组合数学
- 3294: [Cqoi2011]放棋子
- 【BZOJ 3294】[Cqoi2011]放棋子
- BZOJ 3294: [Cqoi2011]放棋子
- BZOJ 3294: [Cqoi2011]放棋子
- BZOJ P3294[Cqoi2011]放棋子
- 【组合计数】【bzoj 3294】: [Cqoi2011]放棋子
- [BZOJ]3294: [Cqoi2011]放棋子 DP+组合数学
- bzoj 3294: [Cqoi2011]放棋子 动态规划+排列组合
- bzoj 3294: [Cqoi2011]放棋子 (容斥原理+组合数+DP)
- 放棋子
- 放棋子
- 放棋子
- 【Python学习】win10下xgboost Python安装教程
- Mac下安装Homebrew
- Android回调函数
- 部署war包到tomcat
- 16蓝桥杯基础—查找整数
- BZOJ3294: [Cqoi2011]放棋子
- 闭包
- 关于 Golang 限制goroutine的数量
- Invalid MEX-file caffe_.mexw64 找不到指定的模块
- 16蓝桥杯基础—十六进制转换十进制
- 指向数组的指针
- 16蓝桥杯基础—十六进制转八进制
- junit测试--访问其他主机的IP的测试代码
- Unity学习笔记(组件篇2) 视频文件的播放和录音