1、一个长度为$n$的数组$A,1\leq A_{i} \leq b$。$n$是偶数。$A$中任意两个数字不相等,且$A$中奇数的个数等于偶数的个数。另外有$m$个限制,第$i$个限制是$A$中$[1,x_{i}]$之间的数字的个数为$c_{i}$。问是否存在一个数组 $A$满足上述所有条件?
$n\leq 50,n \leq b \leq 2000,m\leq 50$
思路:将限制按照$x$排序。那么$[x_{i}+1,x_{i+1}]$中数字个数为$c_{i+1}-c_{i}$。然后进行动态规划。$f[i][j]$表示考虑了前$i$个区间的限制,其中偶数的个数为$j$时是否成立。
#include #include #include #include #include #include #include
2、计算最小生成树的伪代码如下:
While H is not connected yet: For each component C in H: Find the lightest edge in G that has exactly one endpoint in C. Mark this edge for addition. Add all marked edges to H.
其中,$G$是给定的图,$H$是最后要求的最小生成树。现在构造一个$n$个顶点$m$条边的图$G$使得上述$while$循环恰好执行$k$次。
思路:首先$[1,n]$区间每个节点是单独的一个分量,每次将该区间分为两半,最后将这两部分连在一起。
#include #include #include #include #include #include #include