求助,思路有什么不对么?
查看原帖
求助,思路有什么不对么?
167829
李坤泽楼主2020/12/5 20:17
#include<bits/stdc++.h>
using namespace std;
int n,csp;
long long int f[12][1234][99];
int c[1<<10];
int main(){
    scanf("%d%d",&n,&csp);
    for(int i=0;i<=(1<<n)-1;++i){
        for(int j=1;j<=n;++j){
            if(i&(1<<(j-1))) ++c[i];
        }
    }
    memset(f,0,sizeof(f));
    f[0][0][0]=1;
    for(int i=1;i<=n;++i){
        for(int j=0;j<=(1<<n)-1;++j){
            if(j&(j<<1)) continue;
            for(int k=0;k<=(1<<n)-1;++k){
				if(k&(k<<1)) continue;
            	for(int q=0;q<=csp;++q){
                	if(q<c[j]) continue;
                    if((!(j&k))&&(!(j&(k<<1)))&&(!k&(j<<1))) f[i][j][q]+=f[i-1][k][q-c[j]];
                }
            }
        }
    }
    long long int ans;
    for(int i=0;i<=(1<<n)-1;++i) ans+=f[n][i][csp];
    printf("%lld",ans);
    return 0;
}
2020/12/5 20:17
加载中...