zoukankan      html  css  js  c++  java
  • test-2019-5-6

    巨佬yrb的博客

    T1 ZYB建围墙

    题目大意:求在六边形网格里围住至少n个格子的最短围墙长度
    数据范围:

    solution

    结合图片,40分可以手推出来,然后找到规律:最优解一定是朝着正六边形的形状分布的:
    每一步基于的最优的情况下,应该尽量制造出如左上角第二个图的绿点所示的情况,(因为这样下一步就和上一步的花费相同了),否则是左上角的第一种情况,(比上一步的答案多1),
    我们可以枚举求出对于当前的点数n里面的正六边形的边长x,然后发现对于外面再加一层的情况来说,总共有6段,第1段有x-1个点,第2~5段各有x个点,第6段有x+1个点,每一段都是第一个点+1(拐角只能是第一种情况),后面都是+0(围成了第二种情况), 模拟即可


    T2 ZYB和售货机

    题目大意

    solution:

    • 注意到总共n个点,n条边,则整个图为一个内向基环树(所有i都只有一个fa[i],从i到fa[i]连边,则树上的边都朝向环

    • 边(x,y)的含义为:
      如果x还没有被取完,那么y可以被取任意个(产生num*(sell[y]-buy[x])的收益)
      整张图应该是一个基环树森林的形态

    • 对于树上的边,显然都可以取(先取父亲再取儿子)

    • 对于环上的边
      可以发现,
      1.如果存在一个环上的点i,通过i来买f[i]的收益比连向f[i]的另外一条树边还小,
      不如将这条边断开;
      2.而如果不存在这样的i,则环上的点就都是最优的 ,我们可以先把环上的物品取到每个都只剩一个,
      此时注意到会有一个物品取不到环边的价值,那么我们就找一个环边价值和树边价值的差最小的点,强制它不能选择环边

    • 实际上,我们只要记录到每个节点的最大和次大的边
      DFS 过程中,默认接上最大边的值,维护最大边和次大边的差的最小值
      找到环之后,我们显然要断掉环——使连向某个点的边改变(从默认的最大变成次大),此时只要减去维护的最小值即可

    T3 ZYB玩字符串

    题目大意:

    soluition

    • 暴力(O(len^2))枚举答案,暴力check(尝试能不能拼出来)可得40
    • 枚举过程无法优化,但是check可以:
    • dp过程可以记忆化也可以按区间dp写(石子合并)
  • 相关阅读:
    python网站开发准备ubuntu14.04安装mysql实现windows管理
    python 数据结构之二叉树
    python 数据结构之二分查找的递归和普通实现
    python 数据结构之归并排序
    python数据结构之希尔排序
    ctf study of jarvisoj reverse
    python数据结构之quick_sort
    堆与栈
    汇编整理
    js运算符
  • 原文地址:https://www.cnblogs.com/wmq12138/p/10821913.html
Copyright © 2011-2022 走看看