4 条题解

  • 0
    @ 2014-10-19 23:16:09

    。。。
    这一题本来是个简单题
    正常比赛不应该出到标程的1.5倍时限吗
    std也是卡着过的。。

    • @ 2014-10-22 19:30:50

      别瞎说, doc提交的根本不是标程.
      他只是随便优化了一下dzy493941464的代码(https://vijos.org/records/54426b0b17f3ca1a1f5f3820)然后就AC掉的.

      以及这一题蛮好过的, 读入优化后的递归程序直接就过了.
      你的程序不过是自然的, 首先你没有读入优化就肯定超时的, 何况你还是非递归的程序常数当然大了.

  • 0
    @ 2014-10-19 11:07:41

    [doc的题解] 本题是彻头彻尾的树形动态规划, 非常简单, 是本次比赛中最简单的一题.
    我们需要维护 f[0][x] f[1][x] g[0][x] g[1][x] 分别表示对于以x为根的树 (哦这里先需要把问题变成有根数, 随便选取一个根就好了), 如果在x没有匹配掉的情况下, 最多能有f[0][x]对匹配, 方案有g[0][x]组, 如果在x已经匹配了的情况下(当然是指和x子树中的点匹配, 也就是x的某一个子节点), 最多能有f[1][x]对匹配, 方案有g[1][x]组.
    问题的转移需要考虑 x 是与哪一个子节点匹配的 (比如说与y匹配), 那么就可以利用 f[0][y] 与 f[0][z] f[1]z 来得到x的状态.
    整体十件复杂度是O(n)的.
    一些可以避免超时的方法包括:
    (1) 对于读入进行优化, 对于c/c++选手可以利用getchar()读入数据, 这样比一般直接读入整数要快.
    (2) 本题如果写递归是有可能RE的. 但是写非递归常数太大也会TLE.
    (3) 可以考虑直接汇编申请栈空间, 对于c/c++选手可以用下面的方法.
    int size = 8 << 20;
    char p = (char)malloc(size) + size;
    asm("movl %0, %%esp\n" :: "r"(p));
    来获得更大的栈空间, 然后直接递归写就ok了. 标称只有不足70行, 应该是很简单的.
    (4) 当然vj的评测极们速度各不相同, 有的时候还要看评测机的心情, 所以如果依然也是有可能的.

    • @ 2014-10-19 11:49:23

      能发布一下标程吗?

  • 0
    @ 2014-10-18 21:52:12

    略显霸气吧

  • 0
    @ 2014-10-18 21:52:01

    我知道怎么提前发题解啊

  • 1

信息

ID
1892
难度
9
分类
(无)
标签
(无)
递交数
524
已通过
13
通过率
2%
被复制
2
上传者