zoukankan      html  css  js  c++  java
  • [SGU223]Little Kings(状压DP)

    随便DP一下

    Code

    #include <cstdio>
    int sta[150],cnt[150],tp,n,k;
    long long dp[12][144][150],Ans;
    int main(){
    	scanf("%d%d",&n,&k);
    	for(int i=0;i<(1<<n);++i)if(!(i&(i<<1))&&!(i&(i>>1)))sta[++tp]=i;
    	for(int i=1;i<=tp;++i)for(int x=sta[i];x;x&=(x-1),++cnt[i]);
    	for(int i=1;i<=tp;++i)dp[1][cnt[i]][i]=1;
    	for(int i=1;i<n;++i)for(int j=0;j<=k;++j)
    		for(int k=1;k<=tp;++k)if(dp[i][j][k])
    			for(int x=1;x<=tp;++x)
    				if(!(sta[x]&sta[k])&&!((sta[x]<<1)&sta[k])&&!((sta[x]>>1)&sta[k]))
    						dp[i+1][j+cnt[x]][x]+=dp[i][j][k];
    	for(int i=1;i<=tp;++i)Ans+=dp[n][k][i];
    	printf("%lld
    ",Ans);
    }
    
  • 相关阅读:
    max_element( )
    dp
    dfs
    dp
    区间dp
    树形dp
    dp-最长回文串
    go 结构体函数
    go 结构体初始化
    Golang数组和切片的区别
  • 原文地址:https://www.cnblogs.com/void-f/p/9379618.html
Copyright © 2011-2022 走看看