BZOJ4903 UOJ300 CTSC2017 吉夫特 【Lucas定理】

BZOJ4903 UOJ300 CTSC2017 吉夫特


弱弱地放上题目链接


Lucas定理可以推一推,发现C(n,m)是奇数的条件是n&m==m,也就是说n是m的子集,这不就显然了吗

非常友好的枚举子集DP

f[i]表示以i结尾的不下降序列的方案数什么的


#include<bits/stdc++.h>
using namespace std;
#define N 233340
#define Mod 1000000007
int n,ans=0,dp[N];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int x;scanf("%d",&x);
        int tmp=(dp[x]+1)%Mod;
        for(int sub=x;sub;sub=(sub-1)&x)
            dp[sub]=(dp[sub]+tmp)%Mod;
        ans=(ans+tmp)%Mod;
    }
    printf("%d",ans-n);
    return 0;
}
原文地址:https://www.cnblogs.com/dream-maker-yk/p/9676291.html