2018年8月6日训练日记

HDU 5378 Leader in Tree Land(树形dp+组合数)把1到n划分到n个结点的树中,子树的领导是这个子树中权值最大的点。求n个结点的树中,领导为k个的情况数。定义dp[u][i] 表示 子树u选择了i个领导的情况数。假设处理了u的其他子树,  现在计算子树v

那么dp[v][i+j] = (dp[v][i+j]+dp[v][i]*dp[u][j]*C(siz[u]-用过的点数,siz[v])。考虑影响本次操作影响后面的状态转移,用一个tmp数组。

tmp[i+j] = (tmp[i+j]+dp[v][i]*dp[u][j]*c[siz[u]-cnt][siz[v]])。转移的时候只从有效状态进行转移,那么复杂度是O(n^2)的

对于每个根,可以选这个点为领导有1种方案,不选它为领导有siz[u]-1种方案,因此得到两个有效状态。

cnt为u子树之前已经考虑过的节点数目之和,因为要从siz[u]-cnt选出siz[v]个,所以要乘以组合数。

HDU 5379 Mahjong tree(思维+DFS)题意:给你一棵n个结点n-1条边的树,现在要给每个结点编号(1~n),要求:①每个结点的儿子结点编号连续;②每棵子树的所有结点编号连续。连续的概念是,排序后是如i,i+1,i+2,…,j的形式。问你有多少种编号方式。

从根节点开始,若一个节点有一个非叶子儿子节点,那么这个节点就会有两种选择,一个是当前最大的数,一个是当前存留最小的数。所有儿子节点的总方案数为T,S个叶子儿子节点,则非叶节点儿子的个数>2时方案数为0,=2时方案数为T*(S!),<2时为2*T*(S!)。然后注意处理叶节点就可以了。这道题解题思路十分重要,需要好好思考一下。

然后多校日常崩。。。签到题做了两个小时终于做出来了。还是过的人数第二多的题。。。然后搞一到线段树一直T。好像是维护最小值才能过,正解是RMQ,明天补。这次比赛的收获就是贪心过不了很明智的果断爆搜剪枝过了(虽然不减枝其实也能过),然后复习了一下余弦定理。。。队友上网找了个错模板WA了好多发。。。然后就是心态越来越好了,打比赛越来越顺手了。然后明天继续看题,争取找几道好题写一下代码。

 

你可能感兴趣的:(训练日记)