1336A. Linova and Kingdom Problem - 1336A - Codeforces
给定 n 个节点的有根树,根是 11 号节点。
你可以选择 k 个节点将其设置为工业城市,其余设置为旅游城市。
对于一个工业城市,定义它的幸福值为工业城市到根的路径经过的旅游城市的数量。
你需要求出所有工业城市的幸福值之和的最大可能值。
思路
正向考虑--选取哪几个节点作为工业可以使幸福值最大。如果一个工业节点之前添加工业节点,其幸福值需要重新计算,难以计算,考虑反向思路。
反向考虑--选取哪几个节点作为旅游可以使幸福值最大。可以想象,旅游节点一定是从根节点开始向子节点延伸,中间不会有工业节点。同时也意味着工业节点也是连续的①
根据①可以知道,假设该节点为工业节点那么它的所有子节点也要为工业节点。因此一个节点的幸福值应该为dep-son(深度-子节点数),减去子节点是为了避免重复计算。
1352G. Special Permutation Problem - 1352G - Codeforces
给定 t 组数据,每组数据包含一个整数 n。
对于每个整数 n,你需要输出一个长度为 n 的全排列 p,求其中任意两个相邻(相邻)元素的绝对差(即差的绝对值)在2和4之间(包括2和4)的排列数p。形式上,求每一个 (1≤i<n)都是 2≤|pi−pi+1|≤4的这样的排列 p。
思路
很容易看出来全奇数顺序排列和全偶数顺序排列都满足2≤|pi−pi+1|≤4,只要将两个排列组合起来就可以。
由于需要尽可能少的改变序列的顺序,优先考虑拼接,再看条件--2≤|pi−pi+1|≤4。
可以发现两数间隔最大为4,也就是任意两序列的第i个和第i+2个(例如1和4)都可以兼容。
那么可以先放奇序列,再放偶序列,并在连接处改变偶序列前两个的相对位置。
(eg 1 3 5 7 9 6 8 4 2)