zoukankan      html  css  js  c++  java
  • TC做题笔记

    SRM593 Div1Medium——May The Best Pet Win(bitset优化)

    Description

    给出n个元素取值的max、min,把这n个元素分割成两个集合,求如何分割使两个累和差的最大值最小

    \(n\le 50,min,max\le 10000\)

    Solution

    把题意化归成式子,就是 求\(max(A\sum{max}-B\sum{min},B\sum{max}-A\sum{min})\)

    • 由于已知\(A\sum{max}+B\sum{max}\),\(A\sum{min}+B\sum{min}\)
    • 分别将其定义成Max和Min
    • 那么上述式子可以化为\(max(Max-B\sum{min}-B\sum{max},B\sum{min}+B\sum{max}-Min)\)
    • 可以发现我们只用计算出\(B\sum{min}+B\sum{max}\)的所有情况即可
    • 观察数据可知,这个值可以穷举.
    • 同时可以用bitset进行常数优化

    SRM549 Div1Medium——Magical Hats(状压dp)

    Description

    有一个矩阵,矩阵中有num个帽子,有k个硬币塞在帽子下。

    小Q有x次机会,每次选择一个帽子打开,小C可在打开帽子前改变硬币放的位置,且要总是满足每一列(行)帽子数+硬币数为偶数。

    小C和小Q都足够聪明,求小Q收益的最大值。

    \(n,m,k,num\le 13\)

    Solution 剧毒的"聪明".

    • 在这里,聪明大概可以理解为:小C总是让小Q取不到硬币,就算能取到,也是最小的硬币.而小Q会在未被打开的帽子中选择一个使自己收益最大的方案.
    • 可以这么理解: 在小Q翻开这个位置之前,小C要决定在不在这个位置上放硬币.
    • dp的定义为一个三进制数,来表示某一个帽子的状态.
    1. 表示确定这个帽子里不放硬币.
    2. 表示确定这个帽子里放硬币.
    • dp的值为小Q能取到的硬币数
    • 可以发现这个二进制数无形中维护了翻出硬币的个数(cnt of 2)还有翻开帽子(cnt of 1+2)的个数
    • 利用记忆化搜索.当剩下的硬币都确定在哪时,就可以进行判定是否合法
    • 当小Q的次数用完时,如果硬币还没放完,那就继续确定硬币的方法,如果有一种合法方案,就返回零
    • 由于小Q是聪明的,他会选择最优的取的方案,这里去max
    • 由于小C是聪明的,他能选择的是在不在小Q取的地方放硬币,所以这里取min

    SRM552 Div1Medium——Fox And Flower Shop Div One(前缀和+DP+ST表优化)

    Description

    给出n*m的矩阵,格子有三种可能,为A,B或为空

    求取出两个不相交的矩阵,使其\(|Sum(A)-Sum(B)|\le K\)\(Sum(A)+Sum(B)\)最大

    \(N,M<=30,K<=900\)

    Solution

    • 最暴力的写法n^8枚举两个矩阵 \(O(n^8)\)
    • 然后稍微优化一波,预处理出以某个点为分界点,Sum(A)-Sum(B)时Sum(A)+Sum(B)的最大值,然后再求解 \(O(n^6)\)
    • 再想一下,答案的两个矩阵一定分布在一行或一列的上下,这样枚举加验证的复杂度为 \(O(n^5)\) 这样就可以过了
    • 但实际上代码可以再优化.也是枚举行或列,可以发现相邻的两行(列)之间是有递推关系的,所以不用重新算的.为了保证复杂度,关于差值\(\le K\)的方面可以用ST表解决,这样的复杂度为\(O(n^4+n^3logn)\)

    SRM561 Div1Medium——Circles Game(博弈)

    Description

    给定一个森林,轮流取点,当且仅当子树一个点被取过,该点不能取.

    Solution

    • 可以发现,每个树都是一个子游戏.
    • 取了一个点后,这个点到根节点的路径都不能取了,发现这样就把树有分割成了许多子树.
    • 那么后继状态的sg值就是这些子树sg值的异或
    • 为解决子树的sg值,就要先计算子树作为根时的sg值,由此递归,然后计算出答案.
    • 时间复杂度\(O(n^2)\)

    SRM568 Div1Medium——Equal Sums(建图)

    Description

    给定一个有未知数的待补充矩阵,给定的值满足小于等于9,并且要使矩阵满足在所有列中取一个数,并且所有数的行编号要不同,使所有这样的组合的和都相同.
    求方案数(mod1e9+7)[满足有有限解]

    \(n\le 50\)

    Solution

    • 可以得到结论,对于满足这样关系的矩阵,每行每列都有特征值
    • 那么对于已知的值,只用枚举行特征值(枚举次数<=10),就可以知道行的特征值.
    • 由于这些递推关系可以传递,所以可以连边,枚举一个值之后就把联通的特征值全部计算出来
    • 但同时要考虑去重,因为如果每列特征值都+1,行特征值都-1,那么结果也会满足条件.但这样的结果是一样的,不能重复算
    • 所以只要使列特征值的最小值严格等于0就好.
    • 关于这个可以通过容斥解决

    SRM416 Div1Medium——CustomDice

    Description

    求使互不相同六个正整数的和小于等于n的方案数.

    \(n\le1e6\)

    Solution

    • 难点在于很难让这六个数不同.
    • 先令这六个数有序,设这六个数为\(a_1,a_2,a_3,a_4,a_5,a_6\)
    • \(b_1=a_1,b_2=a_2-a_1...b_6=a_6-a_5\)
    • 同时发现:\(6b_1+5b_2+4b_3+3b_4+2b_5+b_6=n\)
    • 然后问题就转换成找到\(b_{1...6}>0,\sum_{i=1}^{6}b_i*i<=n\)的方案数.
    • 然后直接dp转移+前缀和优化就好了,时间复杂度\(O(6n)\)
  • 相关阅读:
    程序员通过什么渠道接外包项目
    中小型软件项目开发一般流程建议
    DevExpress GridControl功能总结
    页面UI注意事项,你在乎吗?
    加密,解密
    本地化(国际化)
    AutoLayout(自动布局)
    UItableView与UICollectionView
    分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)
    NSPredicate
  • 原文地址:https://www.cnblogs.com/Zerokei/p/9669331.html
Copyright © 2011-2022 走看看