• CSP-S 模拟 R2D2 总结


    额。。。

    T1是构造题,画出一棵树然后开始想,可以考虑黑白染色,黑点刚进栈就输出,白点出栈再输出,跳3条边的情况就是从一个点的一个子树跳到另一个的情况。

    启发:对于这种构造题,先考虑什么时候可以简单操作(跳两边),什么时候必须用较复杂的操作(跳三边),这样思路就会清晰,写起来也就明了了。

    复杂度:(O(n))

    T2。。。一直写费用流写挂了。。。

    T2可以考虑 dp,由于每个人有3个属性,注意到组长要比组员经验大,所以我们可以排序,这样就可以维护 2 个属性了,然后剩下的费用可以 dp 处理,然后状态为考虑到 i 人时,选了 j 组,另外还有 l 个组员时的状态,注意到 n 与 k 的关系,可以知道状态不算大,然后还可以滚动数组维护(填表比刷表更好,因为由于滚动了,所以刷表的话要初始化,而填表不用)然后就是要注意 dp 边界问题。

    这种问题一定要排序考虑,想不出贪心就去 dp(我考试时竟然一点没去想 dp。。。)

    复杂度:(O(nk^2))

    T3

    就相当于处理字典序的问题。

    有 2 种情况:

    1.(s>t) 这是统计每种长度的s不同本质的子序列即可

    2.(s==t) 注意到若一组子序列 A 比 B 大,那么 A 拓展出的就一定也比 B 拓展的大,于是可以考虑求 g[i][j] 表示 以 i 和 j 结尾的子序列中刚开始 (a[i]>b[j]) 的本质不同子序列数,然后要求这,就要求 f[i][j] 表示以 i 和 j 结尾的子序列中相同的本质不同的子序列数(有点说不太明白。。。),然后可以求出 g,进而可以求出 h[i][j] 表示以 i 和 j 结尾的子序列中满足 (a[i]>b[j]) 的本质不同的子序列数,可以通过 g 与 h 来求。(然后感觉好像求 g 没啥必要?)

    然后就是处理时可以前缀和优化,再就是不要算重了,方法是记录 p[i] 表示 i 前一次出现 a[i] 的位置,由于定义都是从哪结尾的,所以 p[i] 之前的都可以转移到 p[i] 上,就不用转移到 i 上了。

    复杂度:(O(n^2))

    感觉周末得把之前的几道计数题和 dp 的总结写了。。。

  • 相关阅读:
    禾匠 运行h5
    禾匠 前端用户中心显示隐藏菜单
    禾匠 创建新插件
    芸众如何查看前端版本
    查看电脑内存条个数 和 内存是ddr几代
    yii框架中的andFilterWhere 和 andWhere的区别
    mysql 5.7之前版本截取json字符串的值
    FTP上传文件总是上传一半就断掉
    Java中如何保证线程安全性
    Java8内存结构解读
  • 原文地址:https://www.cnblogs.com/Hikigaya/p/11736068.html
Copyright © 2020-2023  润新知