3294: [Cqoi2011]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 294[Submit][Status][Discuss] Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. Output 输出仅一行,即方案总数除以 1,000,000,009的余数. Sample Input…
http://www.lydsy.com/JudgeOnline/problem.php?id=3294 如果一个颜色的棋子放在了第i行第j列,那这种颜色就会占据第i行第j列,其他颜色不能往这儿放 设第k种颜色的棋子有a[k]个 令g[k][i][j] 表示第k种颜色的棋子,恰好占据i行j列的方案数 g[k][i][j]=C(i*j,a[k])-Σh Σl g[h][l]*C(i,h)*C(j,l)  1<=h<=i,1<=l<=j,且满足 h!=i 或 l !=j 即 总方案数(…
Description   Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. Output 输出仅一行,即方案总数除以 1,000,000,009的余数. Sample Input 4 2 2 3 1 Sample Output 8 HINT N,M<=30 C<=10 总棋子数<=250 我们发现因为不能同行同列颜色不同的格子,所以我们相当于是将整张棋盘的行列分给这C种棋子. 这样我…
可以看做棋子放在某个位置后该种颜色就占领了那一行一列.行列间彼此没有区别. 于是可以设f[i][j][k]表示前k种棋子占领了i行j列的方案数.转移时枚举第k种棋子占领几行几列.注意行列间是有序的,要乘上一个组合数.这里f[i][j][k]可以是在原棋盘选i行j列占领的方案数,也可以是占领i行j列棋盘的方案数,如果是第二种最后统计答案的时候还要乘上个组合数,转移略有不同但没有本质区别.我们还需要计算出k个棋子占领i行j列中的方案数才能转移. 考虑怎么求这个东西.设其为g[i][j][k].不妨把…
题目链接 解题思路: 发现一个性质,如果考虑一个合法的方案可以将行和列都压到一起,也就是说,在占用行数和列数一定的情况下,行列互换是不会影响答案的,那么考虑使用如下方程: $f[i][j][k]$为占领了i行j列使用了前k种颜色,由于要求全部用完,不需要枚举放入多少,考虑一个一个来添加颜色.考虑添加第k种颜色: 因为第k种颜色一定是占据了新的一行一列,所以加入第k种颜色后的行数=加入之前的行数+第k种颜色占据的行数,列数同理. 设第k种颜色的棋子有a个,那么我们只需要知道用A种颜色占据i行j列的…
[BZOJ3294]放棋子(动态规划,容斥,组合数学) 题面 BZOJ 洛谷 题解 如果某一行某一列被某一种颜色给占了,那么在考虑其他行的时候可以直接把这些行和这些列给丢掉. 那么我们就可以写出一个\(dp\) 设\(f[i][r][c]\)表示考虑了前\(i\)种颜色,还剩下\(r\)行\(c\)列没被染色. 那么转移的时候枚举一下当前颜色染了\(a\)行\(b\)列转移就好了. 但是问题来了,怎么计算用\(K\)个棋子恰好覆盖\(a\)行\(b\)列的方案数呢? 恰好很不好算,那么我们换一下…
3294: [Cqoi2011]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 628  Solved: 238[Submit][Status][Discuss] Description   Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. Output 输出仅一行,即方案总数除以 1,000,000,009的余数. Sample Inp…
[CQOI2011]放棋子 \(solution:\) 看到这道题我们首先就应该想到有可能是DP和数论,因为题目已经很有特性了(首先题面是放棋子)(然后这一题方案数很多要取模)(而且这一题的数据范围很小) 但真正实用的还是分析题目性质:这一道题我们仔细读题,可以发现每一种棋子的影响是相对独立的(即我们只需要知道这种颜色的棋子占了多少行列,而不需要知道它占的哪一行那一列)(这个可以画画图自证一下),而且每一种颜色占多少行和多少列也有方案数(我占两行两列,可以用两个棋子,也可以用三个或四个棋子)(而…
洛谷题目链接:[CQOI2011]放棋子 题目描述 在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同 颜色的棋子不能在同一行或者同一列.有多少祌方法?例如,n=m=3,有两个白棋子和一 个灰棋子,下面左边两祌方法都是合法的,但右边两祌都是非法的. 输入输出格式 输入格式: 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. 输出格式: 输出仅一行,即方案总数除以 1,000,000…
3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm. Output 输出仅一行,即方案总数除以 1,000,000,009的余数. Sample Input 4 2 2 3 1 Sample Output 8 HINT N,M<=30 C<=10 总棋子数<=250 Source [分析] 表示一开始看错题ORZ..以为相同颜…
P3158 [CQOI2011]放棋子 放棋子的顺序和方案数无关,所以可以从按颜色递推 设$f[u][p][k]$为放到第$u$种颜色,所剩空间$p*k$的方案数 $g[u][i][j]$表示第$u$种颜色占据$i*j$空间的方案数,可以预处理 $g[u][i][j]=\binom{i*j}{c[u]}-\sum_{p=1}^{i}\sum_{k=1}^{j}g[u][p][k]*\binom{i}{i-p}*\binom{j}{j-k}*[p<i||j<k]$ $f[u][p][k]=\su…
题目描述: 输入格式 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数保证不超过nm.N,M<=30 C<=10 总棋子数有大于250的情况 输出格式 输出仅一行,即方案总数除以 1,000,000,009的余数. 样例 样例输入 4 2 2 3 1 样例输出 8 数据范围与提示 30% n,m<=10 solution:10%:cout<<0<<endl; 肯定有0的情况比如c>m…
题目: 洛谷3158 分析: 某OIer兔崽子的此题代码中的三个函数名:dfs.ddfs.dddfs(充满毒瘤的气息 显然,行与行之间.列与列之间是互相独立的.考虑背包,用\(f[k][i][j]\)表示用前\(k\)种颜色占了\(i\)行\(j\)列的方案数,\(g[i][j]\)表示用颜色\(k\)占据\(i\)行\(j\)列的方案数,\(c[i]\)表示颜色为\(i\)的棋子数,就有如下方程: \[f[k][i][j]=\sum _{a=0}^i \sum_{b=0}^j f[k-1][i…
比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子的方案数. 假设当前枚举到的是第 $k$ 个棋子,该种棋子有 $num_{k}$ 个. 枚举 $d1,d2$ 表示安排这 $num_{k}$ 个棋子需要用 $d1$ 个行,$d2$ 个列. 可以将 $d1$ 个行和 $d2$ 个列并到一起,这就构成了一个 $d1\times d2$ 的矩形. 在这个…
题意:在一个m行n列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同颜色的棋子不能在同一行或者同一列.有多少祌方法? 解法:这道题不会做,太菜了qwq.题解是看洛谷大佬的. 设C是组合数,f[i][j][k]:代表前k种棋子合法地恰好占领i行j列 那么得到状态转移方程:f[i][j][k]=sigma f[ki][kj][k-1] * C[n-ki][i-ki] * C[m-kj][j-kj] * a[k]个棋子恰好占领i-ki行j-kj列的方案数. 这个式子的意思是我们枚举前k-1…
时隔多日 我又来挑战这道dp. 几个月前给写自闭了.几个月后再来. 首先一个我们能列出来的状态 是以行为转移的 f[i]表示前i行...但是会发现此时列我们控制不了 且棋子的颜色,个数我们也要放到状态里. 这个dp是一个完成不了 或者说复杂度过高的dp. 必须得换一个状态 可以想到 由于每种颜色棋子独立 所以我们没有必要若干个颜色的棋子进行混合求方案. 可以一种一种颜色的棋子放. 所以有状态 f[i][j][k]表示前i种颜色的棋子占领了j行K列的方案数. 这样行和列的状态有了 我们只需要安排一…
题解 本题是一个 \(DP\) 加 容斥,容斥的式子很好推,重点是如何想到和如何推出 \(DP\) 部分的式子. 因为不同种颜色的棋子不能放在同一行或同一列,所以不同种的棋子是相对独立的. 据此,我们可以推出一个式子,设 \(f_{i,j,k}\) 表示前 \(k\) 种颜色占据了 \(i\) 行 \(j\) 列. \[f_{i,j,k}=\sum_{l=0}^{i-1}\sum_{r=0}^{j-1}f_{l,r,k-1}×g_{i-l,j-r,num_k}×(^{n-l}_{i-l})×(^…
想到了50%吧算是. f[i][j][k]表示,前i种,占了j行k列.方案数. 发现,转移要处理:“用c个棋子,占据n行m列”的方案数. 设g[i][j][k]表示,i行j列用k个棋子占的方案数.直接处理复杂度爆炸. 然后我就mengbier了. 考虑大力容斥: 也即,总方案数-不合法方案数(不能覆盖完全) g[i][j][k]=C(i*j,k)-∑l∑r:g[l][r][k]*C(i,l)*C(j,r) (i*j>=k&&l<=i&&j<=r) 显然由于…
传送门 解题思路 设\(f[i][j][k]\)表示前\(k\)个颜色的棋子占领了\(i\)行\(j\)列的方案数,那么转移时可以枚举上一个颜色时占领的位置,\(f[i][j][k]=\sum\limits_{l=1}^n\sum\limits_{j=1}^mf[l][r][k-1]*C(n-l,i-l)*C(m-r,j-r)\),但发现这样会少一个\(k\)这种颜色占领的方案数,再设\(g[i][j][k]\)表示用相同颜色的\(k\)个棋子占领\(i\)行\(j\)列的方案数,而算\(g\)…
Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数. 第二行包含c个正整数,即每个颜色的棋子数. 所有颜色的棋子总数保证不超过nm. N,M<=30 C<=10 总棋子数有大于250的情况. Output 输出仅一行,即方案总数除以 1,000,000,009的余数. Sample Input 4 2 2 3 1 Sample Output 8       $Solution$ 20%:爆搜,没甚么技术含量虽然我考场上还是没打对只骗到10分Orz…
题解: 一道很经典的组合数+dp 首先考虑f[i][j][k]表示前k种颜色正好占据了i行j列 转移的话就是枚举第k种颜色占据了几行几列 通过自身转移 然后其在内部的相对顺序是不确定的所以要乘以组合数 f[i][j][k]=f[x][y][k-1]*C(i,x)*C(j,y)*g[i-x][j-y][k] 其中g[i-x][j-y][k]表示第k种颜色正好占据这i-x,j-y的方案数 接下来考虑如何计算g[i][j][k] 我们会发现这个东西不好递推..因为不知道当前占据了哪几行 而且也不太好从…
传送门 题解(因为公式太多懒得自己抄写一遍了--) //minamoto #include<bits/stdc++.h> #define ll long long #define R register #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i…
[CQOI2011]放棋子 在一个n行m列的棋盘里放一些彩色的棋子,使得每个格子最多放一个棋子,且不同颜色的棋子不能在同一行或者同一列.有多少种方法? 例如\(,n=m=3\),有两个白棋子和一个灰棋子,下面左边两种方法都是合法的,但右边两种都是非法的. 输出答案对\(10^9+9\)取模的结果. 我们设\(f_{i,j,k}\)表示前\(i\)种颜色的棋子,占了\(j\)行\(k\)列的方案数. 转移时,考虑第\(i\)种颜色占了\(j'\)行\(k'\)列的方案数为\(g_{i,j',k'}…
Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例   Output 一个整数,即合法的方案数. Sample Input 2 0 1 1 0 Sample Output 1  …
题目 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. Input 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍, Output 一个整数,即合法的方案数. Solution 我们先来科普一下错排问题. 错排问题指考虑一个有n个元素的排列,若一个排列中所有的元…
(13')放棋子 今有 6 x 6 的棋盘格.其中某些格子已经预先放好了棋子.现在要再放上去一些,使得:每行每列都正好有3颗棋子.我们希望推算出所有可能的放法.下面的代码就实现了这个功能. 初始数组中,"1"表示放有棋子,"0"表示空白. int N = 0; bool CheckStoneNum(int x[][6]) { for(int k=0; k<6; k++) { int NumRow = 0; int NumCol = 0; for(int i=0…
[BZOJ4563][Haoi2016]放棋子 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. Input 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例 Output 一个整数,即合法的方案数. Sample Input 2 0 1 1 0…
https://www.lydsy.com/JudgeOnline/problem.php?id=4563 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. 假设最开始棋子都放在障碍上,然后将所有行压成一行,那么下面的问题就是有多少种方法使得棋子不放在自己原来的位置上并且不能与别的棋子重合? 这就是一个错排问题了,高精…
P3182 [HAOI2016]放棋子 题目描述 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子的限制,求有多少种方案. 输入输出格式 输入格式: 第一行一个N,接下来一个N*N的矩阵.N<=200,0表示没有障碍,1表示有障碍,输入格式参考样例 输出格式: 一个整数,即合法的方案数. 输入输出样例 输入样例#1: 2 0 1 1 0 输出…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 389  Solved: 248[Submit][Status][Discuss] Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在 这个矩阵上放N枚棋子(障碍的位置不能放棋子),要求你放N个棋子也满足每行只有一枚棋子,每列只有一枚棋子 的限制,求有多少种方案.   Input 第一行一个N,接下来一个N*N的矩阵.N<=2…