[Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理) 题面 一个\(n \times n\)的格子,每个格子里可以填\([1,k]\)内的整数.要保证每行每列的格子上的数最小值为1,有多少种方案 \(n \leq 250,k \leq 10^9\) 分析 这题有\(O(n^3)\)的dp做法,但个人感觉不如\(O(n^2 \log n)\)直接用数学方法求更好理解. 考虑容斥原理,枚举至少有\(i\)行最小值>1,有\(j\)行最小值>1…
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) 分析 显然任意染色的方案数为\(3^{n^2}\),我们考虑求出没有一行一列只有一种颜色的方案数,然后相减. (1)首先考虑仅仅没有全部是一种颜色的列,每一列任意染色有\(3^n\)种方案,去掉每一列只有一种颜色的方案有3种,共\(3^n-3\)种,n列就有\((3^n-3)^n\)种. (2)再…
题目链接: https://codeforces.com/contest/1228/problem/E 题意: 给n*n的矩阵填数,使得每行和每列最小值都是1 矩阵中可以填1到$k$的数 数据范围: $1\leq n \leq 250$ $1\leq k \leq 250$ 分析: 参考博客:https://www.cnblogs.com/scx2015noip-as-php/p/cf589e.html 先预处理出f(x)代表x*n的矩阵,每列最小值是1的填充方案数 以下讨论的方案数,列的最小值…
传送门 看到 $n=250$ 显然考虑 $n^3$ 的 $dp$ 设 $f[i][j]$ 表示填完前 $i$ 行,目前有 $j$ 列的最小值是 $1$ 的合法方案数 那么对于 $f[i][j]$ ,枚举 $f[i-1][k]$ ,有 $f[i][j]=\sum_{k=0}^{j}\binom{n-k}{j-k}f[i-1][k](m-1)^{n-j}m^k$ 这里 $m$ 就是题目的 $k$ $\binom{n-k}{j-k}$ 是因为多出来的 $j-k$ 列 $1$ 可以任选 $(m-1)^{…
题目链接 解题思路: 容斥一下好久可以得到式子 \(\sum_{i=0}^{n}\sum_{j=0}^{n}(-1)^{i+j}C_n^iC_n^j(k-1)^{ni+nj-ij}k^{n^2-(ni+nj-ij)}\)复杂度是\(o(n^2logn)\)但是还能继续化简, \(\sum_{i=0}^{n}\sum_{j=0}^{n}(-1)^{i+j}C_n^iC_n^j(k-1)^{ni+nj-ij}k^{n^2-(ni+nj-ij)}\) \(=\sum_{i=0}^{n}(-1)^iC_…
[题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[j],求长度为n的好的排列数.n<=10^6. [算法]排列组合+动态规划 [题解]设D(n)表示长度为n且满足a[n]=n的好的排列数,考虑这样的一个排列w. 如果数字n-1的位置j<n-k,那么显然这是一个好的排列. 如果数字n-1的位置j>=n-k,那么位置j前的数字一定<n-1…
限制相邻元素,求合法序列数. /** 题目:On the Bench 链接:http://codeforces.com/problemset/problem/840/C 题意:求相邻的元素相乘不为平方数的方案数(这里求得是排列方案数,所以哪怕数相同,只要位置不同也算一种方案) 思路 : 每个数可以表示为 p1^a1 * p2^a2 * ..... 如果 两个数A,B相乘为平方数 则 a1%2 = a1' %2 , a2%2 = a2'%2 ..... 即 对应质因子的幂次 奇偶性相同 这样就可以…
要点 优质题解 因为只有某type坏人全部分布在同一撇时,才能一次消灭.所以题目安排完毕后一定是type(x)和type(y)占一半,其余占另一半. 实际情况只有52*52种,则预处理答案 枚举某两种,并连续两次使用退背包得到无排列的方案数,真·答案是有排列的,乘上一个排列数即可,而根据式子,排列数恰好与方案细节无关,是个与\(|s|\)和全部\(cnt[i]\)有关的定值 const int maxn = 1e5 + 5; const int mod = 1e9 + 7; string s;…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF840C.html 题解 首先,我们可以发现,如果把每一个数的平方因子都除掉,那么剩下的数,不相等的数都可以相邻,相等的数都不能相邻. 也就是说我们把所有数分成了一些集合,同一个集合内的元素不能相邻,不同集合之间的元素可以相邻. 关键部分到了! 设 $dp[i][j]$ 表示前 $i$ 个集合,有 $j$ 对相邻元素相同的方案数. 转移的时候枚举一下把当前集合分成多少段,有多少段插在之前的相同相邻元素之间.…
D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D Description Everyone knows that the battle of Endor is just a myth fabled by George Lucas for promotion of his movie. Actually, no battle of Endor has…
C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/554/problem/C Description Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors are labeled from 1 to k.…
[题目]H. Ember and Storm's Tree Game [题意]Zsnuoの博客 [算法]动态规划+排列组合 [题解]题目本身其实并不难,但是大量干扰因素让题目显得很神秘. 参考:Zsnuoの博客 一.首先Ember必胜(考虑n个点连成一条链),故合法的树一定满足先手必胜.当Storm选择的链满足单调或单峰时,每一条链对答案贡献两对(i,op). 解释:单调时,考虑翻转最后一个数和从第二个数开始取负两种操作.单峰时,上凸考虑翻转顶峰和顶峰右侧的数,下凸考虑取负顶峰和顶峰右侧的数.…
要点 主要学到的东西:一个序列染色,相邻不染同色,恰用\(j\)种颜色的1.模式数.2.方案数.3.具体染色数. 从大的思路上来讲:先dp预处理出每一层的模式数:\(f[i][j]\)表示\(i\)个位置恰染\(j\)个颜色的模式数,然后再dp出各层之间的转移:\(dp[i][j]\)表示\(i\)层恰染\(j\)个颜色的具体染色数,用上一轮的答案乘上这一层的具体染色数(是\(f[l[i]][j]*A_m^j\))再减去这层和上层重复的. 我将染色的阶段分为三个阶段.虽然题目中总是让求方案数但不…
解题思路 将每个数字出现的次数存在一个数组num[]中(与顺序无关). 将出现过的数字i从1到num[i]遍历.(i from 0 to 9) 得到要使用的数字次数数组a[]. 对于每一种a使用排列组合公式:  ans += 上面那个公式.(每用一次这个公式对应一个a) 排列组合公式注解 减号左边表示的是sum个数字全排列并去重. 减号右边表示的是从a[0]中选出一个0当做第一个数字,并对其他数字全排列并去重. 抱歉,写的可能比较混乱,还有部分细节需要读者处理. 代码 #include<bit…
题目链接 思路如下 这一题是:最菜的队伍只有三个人组成,我们只需对排序后的数组的 前三个元素进行分类讨论即可: a[3] != a[2] && a[3] != ar[1] a[3] == a[2] && a[3] != a[1] a[3] == a[2] && a[3] == a[1] 最后还考虑一个数学中的排列组合公式: 题解如下 #include<iostream> #include<algorithm> #include<…
一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit s…
[容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交的补集]和[集合并 或 集合并的补集]之间相互转化的问题. 定义目标函数为f(m),已知函数g(T).(例如已知集合并,则T表示所有T个集合的集合并,通常g(T)=C(n,T)*T个集合的集合并) 当两者都不是补集或两者都是补集时,有f(S)=Σ(-1)|T|-1g(T),其中T为S的非空子集,即奇…
E. Another Filling the Grid 参考:Codeforces Round #589 (Div. 2)-E. Another Filling the Grid-容斥定理 容斥这个东西可以理解,但是运用到实际的时候,还是觉得有点迷迷糊糊的,不知道套公式会不会是一种可行的办法. 是时候也得把以前的知识温习一下了.... 具体的思路看参考的博客就可以理解了. 代码: // Created by CAD on 2019/10/2. #include <bits/stdc++.h>…
https://codeforces.com/contest/1236/problem/B Alice got many presents these days. So she decided to pack them into boxes and send them to her friends. There are nn kinds of presents. Presents of one kind are identical (i.e. there is no way to disting…
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底层.--F 既不住顶层也不住底层.M 住得比 C 高.--S 住的楼层和 F 不相邻.--F 住的楼层和 C 不相邻. create table pailie (rnam varchar(20) ) select 'B' as rnam into #y union select 'C' union…
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几篇文章推荐给大家.最近在计算足球彩票结果组合过程中,使用的到了其功能,生成排列,非常具有代表性,而且也有网友咨询过类似的问题,所以就封装为扩展方法,方便调用. NET开源目录:[目录]本博客其他.NET开源项目文章目录 彩票数据资料目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本…
       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)—组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)——排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合   前言 本文今天介绍的.NE…
       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)—组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)——排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合 前言 本文今天介绍的.NET开…
       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)—组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)——排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合 前言 本文今天介绍的.NET开…
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列. 若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni! 同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n. 对于这样的n个元素进行全排列,可得…
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m==1) { foreach($input as $item) { $result[]=array($item); } return $result; } for($i=0;$i<=count($input)-$m;$i++) { $nextinput=array_slice($input,$i+1…
本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到这边文章请 点击查看原文 提到多线程,也就是四种,pthread,NSthread,GCD,NSOperation 其中phtread是跨平台的.GCD和NSOperation都是常用的,后者是基于前者的. 但是两者区别:GCD的核心概念是将一个任务添加到队列,指定任务执行的方法,然后执行. NSO…
Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3]] 解题: 正常情况下我们通常想到的都是通过使用递归,以枚举的形式来生成组合.先从给定的范围中拿一个数出来,把它同剩下的每一个数进行组合,然后再在每个组合上对不存在于组合的每个数进行合并,这样依次…
最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio.h> int arr[100]; void init(int N) { for(int i = 0; i < N; ++i) arr[i] = i+1; } void print(int a[], int n) { for(int i = 0; i < n; ++i) printf(&qu…
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: var n = 0; for (int i = 0; i < Math.Pow(26, n); ++i) { int t = i; string str = ""; for (int j = n - 1; j >= 0; --j) { int s = (int)Math.Pow…