5.7 笔记 (自用)

pro 1

tco div1 某题:细节题

选m对数 每对数之和为等差数列,公差为d 最大数<=n 求这个序列?

贪心首先放最大数n与次大数n-1 , 每次和-=d,若当前和为偶数放s/2,s/2+1,否则放s/2-1,s/2+1;

pro 2

tco 某题

略略略

pro 3

ctsc 2017 吉伏特 gift

首先注意到在mod p意义下 求组合数等于先按p进制分解后n,m的每一位求组合数再mod p

在mod 2意义下>0等价于mod 2==1 于是只要保证后一个数是前一个数的子集即可转移

所以首先考虑反向dp 枚举子集转移

但理论复杂度并不对

所以我们可以正向dp 枚举超集 for(int i=1;i<=262144;i=(i+1)|a[i]) 

为了降低复杂度,我们对每一个a[i]的前九位与后九位分开考虑,我们考虑后九位枚举超集更新,然后我们用更新后的dp数组来更新前九位的子集,总复杂度(521*n)

很妙的题 标算被碾啊!

pro 4 

zjoi 2016 小星星

f[i][j]树上的第i个点表示原图上第j个点 i子树有多少种标号方案

枚举树上联通的点,

再枚举原图上能够联通的点,乘法原理转移(dfs)

但是可能多个点会映射到同一个点 所以你用的点集也并不是一个全集啊!你的dp存的答案是点集所有子集的答案和啊!!!!!!!!!!!!!

所以我们要考虑容斥(然而我完全不会容斥啊!)

枚举n个点的一个子集

考虑只用这个子集的点 dp

若n-子集点数为偶数则+

反之则- 

若这个子集不为全集的话会恰好被抵消


pro 5

haoi 2015 按位或

min-max容斥 oh so hard

回去又要填坑了啊啊啊啊!

设第i位变成1的时间是t【i】;

由于期望线性可加

E(max(t[1],t[2],t[3]))=...minmax容斥

染到的概率为p,期望时间是1/p;

对于每一个集合 求所有子集的概率和 输入p[i] 求所有满足(j&i)==i的p[i]之和

若一个操作只染到了(全集-S)

所以求其所有子集的概率和

    for(int j=0;j<n;j++){

        for(int i=0;i<1<<n;i++){

                if(i>>j&1)

                        s[i]+=s[i^(1<<j)];

                    }

            }


猜你喜欢

转载自blog.csdn.net/was__n/article/details/80229770
今日推荐