萌新状压写挂求调
查看原帖
萌新状压写挂求调
263414
Sktic楼主2022/10/22 23:23

RT,刚学状压,但是写挂了

#include<bits/stdc++.h>
using namespace std;
const int maxn=2050;
typedef long long ll;
int dp[20][maxn][20];
int bit[maxn],hf[maxn],cnt=0;
int main()
{
	ios::sync_with_stdio(false);
	int n,k;
	cin>>n>>k;
	dp[0][0][0]=1;
	for(int i=0;i<1<<n;i++)
	{
		int num=0,tmp=i;
		while(tmp)
			tmp&=tmp-1,num++;
		bit[i]=num;
		if((i&(i<<1))==0&&(i&(i>>1))==0)
			hf[++cnt]=i;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=cnt;j++)
		{
			for(int t=1;t<=cnt;t++)
			{
				if((hf[j]&hf[t])==0&&((hf[t]*2)&hf[j])==0&&((hf[t]/2)&hf[j])==0)
				{
					for(int x=0;x<=k;x++)
					{
						if(x-bit[hf[j]]>=0)
							dp[i][hf[t]][x]+=dp[i-1][hf[t]][x-bit[hf[j]]],cout<<dp[i][hf[t]][x]<<" "; 
					}
				}
			}
		}
	}
	cout<<endl<<endl;
	ll ans=0;
	for(int i=1;i<=cnt;i++)
		ans+=dp[n][hf[i]][k];
	cout<<ans<<endl;
	return 0;
}
2022/10/22 23:23
加载中...