想打个30分的部分分,结果连样例一都没过,调了好久都调不出来
#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;
}