【BZOJ3294/洛谷3158】[CQOI2011]放棋子(组合数+DP)
题目:
分析:
某OIer兔崽子的此题代码中的三个函数名:dfs、ddfs、dddfs(充满毒瘤的气息
显然,行与行之间、列与列之间是互相独立的。考虑背包,用\(f[k][i][j]\)表示用前\(k\)种颜色占了\(i\)行\(j\)列的方案数,\(g[i][j]\)表示用颜色\(k\)占据\(i\)行\(j\)列的方案数,\(c[i]\)表示颜色为\(i\)的棋子数,就有如下方程:
\]
\(g[i][j]\)在算的时候注意要减去有空行或空列的情况(枚举有多少行、列不是空的)。注意要\(a=i\)且\(b=j\)的情况要跳过:
\]
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
using namespace std;
namespace zyt
{
template<typename T>
inline void read(T &x)
{
char c;
bool f = false;
x = 0;
do
c = getchar();
while (c != '-' && !isdigit(c));
if (c == '-')
f = true, c = getchar();
do
x = x * 10 + c - '0', c = getchar();
while (isdigit(c));
if (f)
x = -x;
}
template<typename T>
inline void write(T x)
{
static char buf[20];
char *pos = buf;
if (x < 0)
putchar('-'), x = -x;
do
*pos++ = x % 10 + '0';
while (x /= 10);
while (pos > buf)
putchar(*--pos);
}
typedef long long ll;
const int N = 40, T = 20, p = 1e9 + 9;
int n, m, c, arr[T], C[N * N][N * N], f[T][N][N], g[N][N];
void init()
{
for (int i = 0; i < N * N; i++)
{
C[i][0] = 1;
for (int j = 1; j <= i; j++)
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % p;
}
}
int work()
{
init();
read(n), read(m), read(c);
for (int i = 1; i <= c; i++)
read(arr[i]);
f[0][0][0] = 1;
for (int k = 1; k <= c; k++)
{
memset(g, 0, sizeof(g));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
if (i * j >= arr[k])
{
g[i][j] = C[i * j][arr[k]];
for (int a = 0; a <= i; a++)
for (int b = 0; b <= j; b++)
{
if (a != i || b != j)
g[i][j] = (g[i][j] - (ll)g[a][b] *
C[i][a] % p * C[j][b] % p + p) % p;
}
}
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
for (int a = 1; a <= i; a++)
for (int b = 1; b <= j; b++)
if (a * b >= arr[k])
f[k][i][j] = (f[k][i][j] +
(ll)f[k - 1][i - a][j - b] * g[a][b] % p *
C[n - (i - a)][a] % p * C[m - (j - b)][b]) % p;
}
int ans = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
ans = (ans + f[c][i][j]) % p;
write(ans);
return 0;
}
}
int main()
{
return zyt::work();
}
【BZOJ3294/洛谷3158】[CQOI2011]放棋子(组合数+DP)的更多相关文章
- 洛谷P3158 [CQOI2011]放棋子 组合数学+DP
题意:在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同颜色的棋子不能在同一行或者同一列.有多少祌方法? 解法:这道题不会做,太菜了qwq.题解是看洛谷大佬的. 设C是组合数, ...
- [洛谷P3158] [CQOI2011]放棋子
洛谷题目链接:[CQOI2011]放棋子 题目描述 在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同 颜色的棋子不能在同一行或者同一列.有多少祌方法?例如,n=m=3,有两个 ...
- P3158 [CQOI2011]放棋子(dp+组合数)
P3158 [CQOI2011]放棋子 放棋子的顺序和方案数无关,所以可以从按颜色递推 设$f[u][p][k]$为放到第$u$种颜色,所剩空间$p*k$的方案数 $g[u][i][j]$表示第$u$ ...
- 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)
3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数 ...
- [CQOI2011]放棋子 (DP,数论)
[CQOI2011]放棋子 \(solution:\) 看到这道题我们首先就应该想到有可能是DP和数论,因为题目已经很有特性了(首先题面是放棋子)(然后这一题方案数很多要取模)(而且这一题的数据范围很 ...
- 洛谷 P3182 [HAOI2016]放棋子(高精度,错排问题)
传送门 解题思路 不会错排问题的请移步——错排问题 && 洛谷 P1595 信封问题 这一道题其实就是求对于每一行的每一个棋子都放在没有障碍的地方的方案数. 因为障碍是每行.每列只有一 ...
- 洛谷P3182 [HAOI2016]放棋子
P3182 [HAOI2016]放棋子 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要 ...
- luogu 3158 [CQOI2011]放棋子
时隔多日 我又来挑战这道dp. 几个月前给写自闭了.几个月后再来. 首先一个我们能列出来的状态 是以行为转移的 f[i]表示前i行...但是会发现此时列我们控制不了 且棋子的颜色,个数我们也要放到状态 ...
- 洛谷 P3182 [HAOI2016]放棋子(错排问题)
题面 luogu 题解 裸的错排问题 错排问题 百度百科:\(n\)个有序的元素应有\(n!\)个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排:有的叫重排.如,1 2的错 ...
随机推荐
- Python基础之变量进阶
变量的引用 变量和数据都是保存在内存中的: 在python中函数的参数传递以及返回值都是靠引用传递的. 函数引用的概念 在python中 变量和数据时分开存储的: 数据保存在内存中的一个位置: 变量保 ...
- Balanced Numbers(数位dp)
Description Balanced numbers have been used by mathematicians for centuries. A positive integer is c ...
- Dubbo 是一个分布式服务框架
Dubbo 是一个分布式服务框架-----http://www.cnblogs.com/chanshuyi/p/5144288.html
- Spark在Executor上的内存分配
spark.serializer (default org.apache.spark.serializer.JavaSerializer ) 建议设置为 org.apache.spark.ser ...
- [K/3Cloud]关于数据库sa密码更改,管理中心登录不上的问题。
有时候可能应为别的原因可能一不小心更改了数据库的密码,导致K/3 Cloud管理中心和单据打不开. 这个时候其实只要在注册一下就能解决了,在浏览器中输入http://192.168.25.35:800 ...
- SiteMesh2-sitemesh.xml的ParameterDecoratorMapper映射器的用法
继续使用上一章http://www.cnblogs.com/EasonJim/p/7086916.html的例子,改造成使用ParameterDecoratorMapper映射器的方法,这个映射器不需 ...
- ms sql SERVER 下载
企业版DVD SQL Server 2005 Enterprise Edition(支持超大型企业) 32 位DVD: ed2k://|file|cs_sql_2005_ent_x86_dvd.iso ...
- eclipse下载egit插件,实现代码git同步问题
1.使用egit后,怎样查看历史log信息? : Team -> Show in history可以查看版本历史提交记录 2.每次代码提交前,先fetch,再merge. 先fetch获得最新代 ...
- 【CV知识学习】【转】beyond Bags of features for rec scenen categories。基于词袋模型改进的自然场景识别方法
原博文地址:http://www.cnblogs.com/nobadfish/articles/5244637.html 原论文名叫Byeond bags of features:Spatial Py ...
- IOS - UIView停止交互
UIView停止交互(失去焦点): 设置userInteractionEnabled=NO, 获取交互设置YES. 能够应用于UIButton, UITextField等交互型控件. [editBut ...