zoukankan      html  css  js  c++  java
  • 2014 8.7 第8场个人 排位

    FZU 2079  最大获利(dp)

    自己很难想到,囧

    dp[i]表示处理完前i 个点的最大收益。
    有两种情况:
    (1)第i 个点不投资,那么dp[i] = dp[i - 1]
    (2)第i 个点投资,那么dp[i] = max(dp[k] + get(k + 1,i) - sigma(c[j]) (k + 1 <= j <= i))(0 < k <
    i)
    这个的意思是,[k + 1,i]点选择全部投资,所以sigma(c[j])表示每个点都投资了,get(k +
    1,i)的意思是,[k + 1,i]完全包含了的给出区间的总价值
    第二步需要优化,我们发现,任意一个dp[i]的转移dp[k],sigma(c[j]),即dp[k] 减去了从k
    + 1,i 的每个数c[i],所以每做到一个数i,给1..i - 1 中的每个dp 值减去c[i](因为以后要用
    某个dp 转移的话,后面的每个数都被减了一次)。第二个是收益[Li,Ri,Pi],同样的方法,
    选择了dp[k],k < Li 的话,意味着get(k + 1,i)增加了Pi,所以给1...Li - 1 的每个dp 值加上Pi

    赛后代码:

    view code


    FZU 2056 最大正方形(二分,水题)

    刚开始看题目还以为是长方形,最近老是看错题目

    view code


    FZU 2082 

    方法一:树链剖分最入门的题目,复杂度nlognlogn(第一次听说树链剖分)
    方法二:随便选一个点作为root,dfs 一次求出root 到某个点的距离,并且得到dfs 序。
    一个显然的事实:dis(u,v) = dis(root,u) + dis(root,v) - 2 * dis(root,lca(u,v)),因此任意两个点的
    距离可以直接用到root 的距离算出来。dis(root,i)表示从根到i 的距离,dis(u,v)是u 到v 的距

    修改操作是,如果给(fa(u),u)这条边增加了一个值x,那么dis(root,u)增加x,且其后代每个
    点的dis(root,i)都增加了x,这个操作,直接用得到的dfs 序维护即可

    (把dfs序列得到的dis弄到线段树上,对于root所有子节点增加x,相当于成段更新,因为root的所有子节点是连续的线段)!!

    view code

    FZU 2057 家谱(简单的遍历)

    view code



    FZU 2059 MM(暴力)

    因为最多只有10次修改,就把当作最多有10个子case就好了

    view code



    FZU 2060 The Sum of Sub-matrices(状态压缩dp,不会)


    FZU 2030  括号问题(dfs/dp)

    view code

  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业07
    C语言I博客作业03
    oracle 创建用户并指定表空间
    Oracle 给用户赋予dblink权限,创建dblink
    IDEA 2020.2 破解、激活
    nginx 里的常用变量
    nginx 跨域问题解决
    elasticsearch (一)
    kubenetes 安装部署
  • 原文地址:https://www.cnblogs.com/zyx1314/p/3898425.html
Copyright © 2011-2022 走看看