社区讨论

状压部分分求助,悬关

P2150[NOI2015] 寿司晚宴参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@logzz3tm
此快照首次捕获于
2023/11/02 17:41
2 年前
此快照最后确认于
2023/11/02 19:48
2 年前
查看原帖
想打个30分的部分分,结果连样例一都没过,调了好久都调不出来
CPP
#include <bits/stdc++.h>
using namespace std;
#define N 10
int n,p;
int f[505]={0,0,1,2,1,4,3,8,1,2,5,16,3,32,9,6,1,64,3,128,5,10,17,256,3,4,33,2,9,512,7,1024};
long long dp[2][1<<N+1][1<<N+1],ans;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int s1=0,s2=1;
	cin>>n>>p;
	dp[0][0][0]=1;
	for(int i=2;i<=n+1;i++)
	{	
		s1++,s2++;
		s1%=2;s2%=2;
		for(int j1=0;j1<=1<<N;j1++)
			for(int j2=0;j2<=1<<N;j2++)
			{
				if(j1&j2) continue;
				if((f[i]&j2)==0) (dp[s1][(f[i]|j1)][j2]+=dp[s2][j1][j2])%=p;
				if((f[i]&j1)==0) (dp[s1][j1][(j2|f[i])]+=dp[s2][j1][j2])%=p;
			//	if(())
			}
	}
	for(int j1=0;j1<=1<<N;j1++)
		for(int j2=0;j2<=1<<N;j2++) 
			ans+=dp[s1][j1][j2]%p;
	cout<<ans;
	
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...