zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 徐州赛区网络预赛 A,B

    A.     Hard to prepare

    题面比较复杂,先介绍下题意:

    n个二进制数字围成一圈,每个数字有k位,相邻的数字至少有一位是相同的,问有多少种合法方案(对1e9+7取模)。

     

    这种描述是题意的简化,不过为了方便理解,我换一种说法:

    n个人坐成一圈,人一共有k个特点,相邻坐着的人至少要有一个相同特点,问有多少种合法方案。

    很显然,这样我们可以这样划:特点完全相同的人(p1),特点完全不同的人(p3),和介于两者之间的人(p2)。

    对于一个人来说,能坐在他旁边的只能是p1和p3,那么我们考虑合法方案,就是从第一个人开始绕一圈,找到最后一个人时p1+p2的值。

    当我们在第一个人时,p1=2^k,p2=0,p3=0。

    假设我们在第i个人时p1=s1,p2=s2,p3=s3。

    那么在第i+1个人时:

    p1的情况:s1+s2

    p3的情况:s2+s3

    由于p1,p3是固定的一种,所以只要是与其有一项特点相同(p2),就可以生成一个。

    p2的情况复杂一些,p2共有2^k-2种,所以从p1生成的p2共有s1*(2^k-2)种,p3同理,但p2到p2的情况略有些复杂,因为p1/p3都与p2至少有一项相同,是合法的,但p2内部可以出现相反的情况:

    比如p1=000 ,p3=111

    p2则可以有010和101,100和011,这些是不能互相生成的。

    这个问题我们可以换个角度来考虑:

    对于某个特点的人,他旁边能坐的人一共有2^k-1种,所以有:

    (p1+p2+p3)*(2^k-1)=P1+P2+P3(前一个状态到下一个状态)

    所以可以求出p2到p2共有s2*(2^k-3)种

     

     

     

    B.      BE, GE or NE

    数据范围考虑,可能是个O(n*200)复杂度的dp,并且是要从后往前的,显然从前往后的局部最优解并不是全局最优解。

    Dp方程如下:

    如果当前为GE方:dp[i][j]=max(dp[i+1][j],dp[i][j]+操作1/操作2/操作3)

    如果当前为BE方:dp[i][j]=min(dp[i+1][j],dp[i][j]+操作1/操作2/操作3)

    其中i,j表示在第i步时,此时分数为j时,当前能到达的最优结局为dp[i][j]

    由于分数存在负数,所以要加上修正值。

  • 相关阅读:
    Intellij IDEA 一些不为人知的技巧
    IDEA配置GIT
    返回数据
    IDEA字体设置
    @RequestParam
    @RequestMapping
    基于jquery fly插件实现加入购物车抛物线动画效果,jquery.fly.js
    js倒计时代码 适合于促销-倒计时代码
    phpstorm 10 注册码
    dispaly:table-cell,inline-block,阐述以及案例
  • 原文地址:https://www.cnblogs.com/qq936584671/p/9630827.html
Copyright © 2011-2022 走看看