【10.29】Codeforces Round #831 (Div. 1 + Div. 2)

ALL:9
AC:4
补题:1
Rank:1885


D. Knowledge Cards

题意:

给定一个 n ⋅ m n\cdot m nm 的矩阵,在 [ 1 , 1 ] [1,1] [1,1] 的位置放置了 k k k 个棋子, k k k 个棋子是 1 ∼ k 1\sim k 1k 的给定排列,给定这些棋子从上到下放置的顺序。每次可以移动最顶端的一个棋子到相邻的位置,棋子除了在起点和终点都不能重叠,而且不能向起点处放棋子以及不能从终点处拿出棋子。求 k k k 个棋子最终能够在 [ n , m ] [n,m] [n,m] 处从上到下以 1 ∼ k 1\sim k 1k 的顺序叠放好。

思路:用一个变量 m x mx mx 记录:任一时刻,除了起点和终点的其他地方放的棋子数量的最大值。和 n ⋅ m − 3 n\cdot m -3 nm3 即放置上限进行比较,有解当且仅当 m x ≤ n ⋅ m − 3 mx\leq n\cdot m-3 mxnm3 。这个减三理解为除去起点终点还要有一个空白格子,类似于华容道。

AC代码:https://codeforces.com/contest/1740/submission/178486171


E. Hanging Hearts

题意:给你一棵树,每次你可以删除一个没有儿子的点并将这个点的值放入序列中,如果父节点比这个要删除的节点大那么父节点的值变为这个值。我们的目标为构造树的点权并且以一种顺序删除点,使得最后的序列最长非下降子序列最长。输出所有可能序列的最大 L I S LIS LIS 的长度。

题解:Codeforces Round #831 (Div. 1 + Div. 2)题解A~E

思路:贪心的想,如何使得 L I S LIS LIS 最长?可以想到,对于一棵树,可以构造使得这棵树的其中一个子树的最大的值小于另一个子树的最小的。比如一棵深度为 3 3 3 的满二叉树,那么 1 ∼ 7 1\sim 7 17 的颜色可以构造为 7 , 5 , 6 , 1 , 2 , 3 , 4 7,5,6,1,2,3,4 7,5,6,1,2,3,4 。是否存在这样的构造?容易知道, d f s dfs dfs 序具有这种性质。

考虑 d p dp dp ,定义 d p ( i ) dp(i) dp(i) 表示 i i i 出现或不出现在这棵子树的 L I S LIS LIS 的末尾时的子树对应序列的最长长度(为什么出现不出现不分开转移?根据之前的构造,分不分开转移结果都是一样的)。

如果 i i i 出现在末尾,那么 L I S LIS LIS 的长度只取决于最小颜色出现的次数,即根节点到叶子结点的最长链;否则, L I S LIS LIS 可以由每一棵子树的 L I S LIS LIS 拼接起来。

AC代码:https://codeforces.com/contest/1740/submission/178514462

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值