LOJ#2340. 「WC2018」州区划分

感觉是比较基础的子集 DP.

令 $dp[S]$ 表示点集 $S$ 构成的价值和,然后枚举最后一个区域就行.

如何判断欧拉回路:

所有点的度数都是偶数,就有欧拉回路.

然后在做子集卷积的时候要注意:很多项是无用的,要手动清空.

code: 

#include       
#define N 22   
#define ll long long 
#define mod 998244353    
#define lb(x) ((x)&(-(x)))
#define setIO(s) freopen(s".in","r",stdin) 
using namespace std;          
int n,m,P,lim;    
int a[N][N],w[N],b[N],vis[N],cnt[1<>=1,x=(ll)x*x%mod) if(y&1) tmp=(ll)tmp*x%mod;  
    return tmp; 
}  
int INV(int x) { return qpow(x,mod-2); }       
void FWT(int *A) 
{
    for(int len=1;len=mod?A[i+j+len]-=mod:0;  
}   
void IFWT(int *A) 
{
    for(int len=1;len=mod?dp[i][k]-=mod:0;     
        IFWT(dp[i]);      
        for(int j=0;j 
   

  

你可能感兴趣的:(LOJ#2340. 「WC2018」州区划分)