状压DP
2025-12-11 14:41:50
发布于:浙江
9阅读
0回复
0点赞
#include<bits/stdc++.h>
#define ull unsigned long long
#define mod 1000000007
using namespace std;
int n,x,y,z;
ull f[41][131075],ne[131075][11],i,j,k;
int main(){
cin>>n>>x>>y>>z;
y+=x,z+=y;
for(i=1;i<=1<<z;i++){
for(j=1;j<=10;j++){
ne[i][j]=1;
for(k=0;k+j<=z;k++)
if(i&(1<<k)){
if(!(k<x&&k+j>x)&&!(k<y&&k+j>y))ne[i][j]|=1<<(j+k);
}
if((i==(1<<z))||ne[i][j]>=1<<z)ne[i][j]=1<<z;
}
}
f[0][1]=1;
for(i=1;i<=n;i++){
for(j=1;j<=1<<z;j++){
for(k=1;k<=10;k++){
f[i][ne[j][k]]=(f[i][ne[j][k]]+f[i-1][j])%mod;
}
}
}
cout<<f[n][1<<z];
return 0;
}
这里空空如也






有帮助,赞一个