TheSwaps
考试时想了半天的概率???期望???随机???两个小时凉凉…
???规律题??? 不想说什么,不会推,暴力代。
Mixing Chemicals
老原题了,没时间打…
我的方法和题解不一样。
题目大意:
有个基环树森林,相连的两个点不能同时选同个编号(1~k),问方案数。
法1
我的方法。
如果时普通森林就时简单的树形DP。
f
[
i
]
[
j
]
=
∑
s
u
m
[
s
o
n
[
i
]
]
−
f
[
s
o
n
[
i
]
]
[
j
]
f[i][j]= \sum sum[son[i]]-f[son[i]][j]
f[i][j]=∑sum[son[i]]−f[son[i]][j]
所以由此就可以把基环树的环上一条边暂时删去,就变成了如上的树D。
然后注意到这条边的两个点不能取同一编号,
于是…就设其中一个为编号1(就意味着只有
f
[
u
]
[
1
]
f[u][1]
f[u][1]有值),然后把另一个
f
[
u
]
[
1
]
f[u][1]
f[u][1]恒定为0,把得出的结果*k就是答案(原因是
u
u
u可以选1~k)
法2
用色多项式公式快速求。
表白
一道几乎裸的01分数规划,再嵌套了动态规划,不多解释。
游戏节目
分两步处理:
第一步:把问题简单化,假设没有k的限制,设求出来的方案总数是x。
第二步:考虑k的限制,由于k<7,可以穷举n个节目取0个,n个节目取1个,n个节目取2个,n个节目取3个,n个节目取3个,n个节目取4个,n个节目取5个,n个节目取6个,穷举完这几种情况就可以知道哪些方案是合法的。而且Combinations(34,0) + Combinations(34,1) + Combinations(34,2) + Combinations(34,3) + Combinations(34,4) + Combinations(34,5) + Combinations(34,6) = 1676116。
也就是这个穷举不超过1676116次。设第二步的方案总数是y。
那么,最后应该输出的答案就是x - y。
第二步的方案数y可以搜索计算结果,下面重点讲讲第一步的方案数x如何求。
由于n最大是34,直接搜索会超时。可以把n个节目平均分成两部分,即第1至第n/2个节目归为第1部分,第n/2+1个节目至第n个节目归为第2部分。
第1部分:显然最多只有17个节目,每个节目可以取或者不取,穷举这17个节目的所有情况,显然有2^17种取法,对于每一种取法,队伍A都有一个得分,设为scoreA, 队伍B也有一个得分scoreB,队伍C也有一个得分scoreC。不妨设difAB1 = scoreA - scoreB, difAC1 = scoreA - scoreC,即每一种取法,都可以计算出一对值(difAB1,difAC1),
第2部分:显然最多也只有17个节目。每个节目可以取或者不取,穷举这17个节目的所有情况,显然也是有2^17种取法。同理,对于每一种取法,设difAB1 = scoreA - scoreB, difAC1 = scoreA - scoreC,即每一种取法都可以计算出一对值(difAB2,difAC2),
显然,如果一个方案要成立,必须要同时满足:
difAB1 + difAB2 > 0 (即队伍A的总得分比队伍B的总得分高)
difAC1 + difAC2 > 0 (即队伍A的总得分比队伍C的总得分高)
于是,问题转化为,枚举一对值(difAB1,difAC1),在第2部分里面查询有多少对(difAB2,difAC2),使得同时满足
difAB1 + difAB2 > 0
difAC1 + difAC2 > 0
显然,对于第2部分,可以用树状数组或者线段树之类的数据结构进行保存,以备第1部分的查询所需。
由于分两步求答案,于是时间复杂度 = x + y = 2^17 * Log(2^17) + 1676116