洛谷P1446 [HNOI2008]Cards】的更多相关文章

P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案. 进一步,小春要求染出\(S_r\)张红色,\(S_b\)张蓝色,\(S_g\)张绿色.他又询问有多少种方案,Sun想了一下,又给出了正确答案. 最后小春发明了\(M\)种不同的洗牌法,这里他又问Sun有多少种不同的染色方案.两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即…
置换群+dp #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<vector> #include<cmath> #define MAXN 65 #define ll long long #define pb push_back #define ft first #define sc second #define mp ma…
题意:有n张牌,有R+G+B=n的3种颜色及其数量,要求用这三种颜色去染n张牌.n张牌有m中洗牌方式,问在不同洗牌方式下本质相同的染色方案数. 解法:这道题非常有意思,题解参考Hzwer学长的.我这里再总结一下: 看到本质相同的染色方案我们很容易会想到Burnside引理和Polya定理,但是这题不能用Polya定理,为什么?因为一般的Ployd染色的颜色个数是没有限制的,于是当循环节为l颜色为c时候,方式数就是c^l(就是因为一个循环方案要相同所以染的颜色也要相同).但是此题颜色个数有限制,不…
题目链接 luogu P1446 [HNOI2008]Cards 题解 题意就是求染色方案->等价类 洗牌方式构成成了一个置换群 然而,染色数限制不能用polay定理直接求解 考虑burnside引理 对于一个置换群其等价类的个数为置换中不动点的平均数 先暴力求出置换中的轮换,然后01背包DP求出不动点方案数 代码 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm…
本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出dp方程 设dp[i]表示放置前i个物品需要的最小价值 dp[i]=min(dp[j]+(sum[i]-sum[j-1]+i-j-L)^2) sum[i]表示前缀和 暴力分有了!!恭喜! 下面我们引入斜率优化: 首先进行一个变形: 原来的式子可以变为:f[i]=min(f[j]+(sum[i]-sum…
链接: P3195 题意: 给出 \(n\) 个物品及其权值 \(c\),连续的物品可以放进一个容器,如果将 \(i\sim j\) 的物品放进一个容器,产生的费用是 \(\left(j-i+\sum\limits_{k=i}^jc_k-L\right)^2\),其中 \(L\) 是一个给出的常数,现在需要把所有物品都放进容器,请你最小化总费用. 分析: 这是一道非常经典的好题,适合练习单调队列优化和斜率优化dp. 我们设 \(sum[i]\) 表示物品权值的前缀和,\(dp[i]\) 表示前…
洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{i}(\dfrac{1}{m})^i(\dfrac{m-1}{m})^{n-i}\\ &=\sum\limits_{i=0}^n\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}i^{\underline{j}}\dbinom{n}{i}(\dfra…
P3197 [HNOI2008]越狱 题目描述 监狱有连续编号为\(1-N\)的\(N\)个房间,每个房间关押一个犯人,有\(M\)种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱. 输入输出格式 输入格式: 输入两个整数 \(M,N\) 输出格式: 可能越狱的状态数,模100003取余 说明 \(1≤M≤10^8\) \(1≤N≤10^{12}\) 我们发现,直接求发生越狱的状态不是不可能,但时间复杂度过不去,很难用矩阵乘法优化. 不妨…
P3197 [HNOI2008]越狱 题目描述 监狱有连续编号为 \(1-N\) 的 \(N\) 个房间,每个房间关押一个犯人,有 \(M\) 种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱. 输入格式 输入两个整数 \(M,N\) 输出格式 可能越狱的状态数,模 \(100003\) 取余 输入输出样例 输入 #1 2 3 输出 #1 6 说明/提示 6种状态为(000)(001)(011)(100)(110)(111) \(1 \l…
LINK:Cards 不太会burnside引理 而这道题则是一个应用. 首先 一个非常舒服的地方是这道题给出了m个本质不同的置换 然后带上单位置换就是m+1个置换. burnside引理: 其中D(a_j)表示 在\(a_j\)这置换中的不动点的个数. 其实我们求出每个置换的不动点个数就行了. 循环很好求 每个循环都填一样的就是不动点了 直接dp一下即可. code //#include<bits/stdc++.h> #include<iostream> #include<…