组合数学
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
LightOJ-1095 Arrange the Numbers
题目分析 这道题我的第一个想法是利用容斥原理,很明显首先得到CkmC_m^k表示选取K个位置做好人,然后对于剩余的部分,我们不能让前面的m-k个人坐上他们原来的位置,因此直接可以用总共排列的方法数,减去一个人m-k个人中有一个坐在原来位置上的,加上2个人坐在原来位置上的,减去2个人坐在原来位置上的。。。。公式是: Ckm∗∑i=1m−kCim−k∗f[n−k−i]∗−1n C_m^k*{\原创 2017-01-03 20:37:45 · 412 阅读 · 0 评论 -
POJ 1026 Ciper(置换里的循环)
题目分析 这道题的输入处理起来有点麻烦,要用gets读取一行,注意前面还有一个空格。然后就是找循环节,用vector存储,每个vector的大小就是一个循环节的大小,然后处理一下即可,之一每个事例结束后还要加一个换行符。#include <cstdio>#include <vector>#include <cstring>#include <iostream>#include <alg原创 2017-01-07 13:44:48 · 319 阅读 · 0 评论 -
POJ 2154 Color
用欧拉函数优化的polya原理#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 36000;int vis[maxn], prime[maxn];int T, n, p;void init(){ //素数筛原创 2017-01-10 15:54:57 · 219 阅读 · 0 评论 -
lightOJ 1382 The Queue
题目分析 具体看代码吧,树形dp的思想,dp[i]表示父节点下面所有子树节点合理排列的方法数。。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1005;const int mod = 1e9+7;#defi原创 2017-01-10 20:28:59 · 293 阅读 · 0 评论 -
lightOJ 1246 Colorful Board
题目分析 首先我们可以利用坐标来观察,我们发现x+y坐标之和为偶数的颜色可以相同,奇数的也可以相同,所以我们就可以将图分成2部分,然后进行染色。当然这里我们用dp方程打表推出染色所需要用到的各种方法数。dp[i][j]表示用j种颜色染i个格子的方案数,注意这里面j中颜色必须全部用完,因此状态转移方程为dp[i][j] = dp[i-1][j]*j+dp[i-1][j-1]*j;预处理一下即可计算原创 2017-01-12 13:28:15 · 223 阅读 · 0 评论