zoukankan      html  css  js  c++  java
  • 二模 (9)day1

    第一题:

    题目大意:

    给出一个n位01串,要么不动它,要么把它删掉一个字符,要么插入一个字符(0或1),要么把一个1变成0,.使得有1的位置号的总和是n+1的倍数,或者是0。

     

    解题过程:

    1.直接枚举操作即可,并且先预处理出后i位1的位置和 以及后i位有多少个1,这样每次枚举插入或者删除的时候就不用重新去统计了。

    初始得分100.

     

     


     

    第二题:

    题目大意:

    笨笨有n条木板需要被粉刷。每条木板被分成m个格子,每个格子要被刷成红色或蓝色。笨笨每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色,已知每个格子最多只能被粉刷一次
    如果笨笨只能粉刷t次,他最多能正确粉刷多少格子。 (1≤n,m≤50,0≤t≤2500)

     

    解题过程:

    1.一开始虽然没看到“每个格子最多只能被粉刷一次”, 但是自己想算法的时候忽略了这个,直接把每一行分成不相交的区间处理出每一行的最优解,然后就变成了背包。 如果每个格子可以被刷好多次,那么这样做就错了。如果那样应该怎么做,还没想出来。。。

    2.对于每一行, F[i][j]  表示前i个,分成j段的最优解。

    那么F[i][j]=max{ max(F[k-1][j-1]+best[k][j]),F[i-1][j] }.

    best[i][j]表示max{区间[i,j]中1的个数,区间[i,j]中0的个数}.

    上面的方程说白了就是要么第i个不在最后一个区间里(F[i-1][j] ),要么第i个在最后一个区间里,就枚举最后一个区间即可。

    初始得分100。

     


     

     

    第三题:

    题目大意:N个点M条边的无向图,要求选一些边使点1和点N联通,代价就是最大的边权。 并且可以免费选k条.(1≤N≤1000,1≤M≤10000)

     

    解题过程:

    1.首先肯定是二分答案mid,把所有权值<=mid的边都先选过来,然后做1到N的最短路(把已经选的边权值看做0,其他看做1),

    如果<=k 就是一个可行的答案。

    2.第一次写的时候是用并查集把所有和1联通的点合并,然后反向做最短路(把所有边权看做1)。最后枚举所有和1相连的点的dist,取最小值。 但实际上很多情况 把所有权值<=mid 的边选过来,但是没有点和1联通的情况。 于是就挂掉了。。初始得分20.

     

  • 相关阅读:
    mongodb06---索引
    mongodb05---游标
    mongo04---基本查询
    mysql06---权限控制
    mysql05---游标
    使用 inotifywait的方式监控文件夹发生变化后自动执行脚本的方法
    ubuntu18.04 安装wine以及添加mono和gecko打开简单.net应用的方法
    Android之Socket群组聊天
    史上最完整的Android开发工具集合
    Android SurfaceView使用详解
  • 原文地址:https://www.cnblogs.com/vb4896/p/4024566.html
Copyright © 2011-2022 走看看