比赛 |
EYOI与SBOI开学欢乐赛9th |
评测结果 |
AAAWAAWWWW |
题目名称 |
陨石的秘密 |
最终得分 |
50 |
用户昵称 |
op_组撒头屯 |
运行时间 |
1.520 s |
代码语言 |
C++ |
内存使用 |
3.09 MiB |
提交时间 |
2022-09-30 21:10:48 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=30+5;
const int M=10+5;
const int mod=11380;
int f[M][M][M][N];
int solve(int x,int y,int z,int d){
if (f[x][y][z][d]!=-1)return f[x][y][z][d];
if (x+y+z<d)return f[x][y][z][d]=0;
if (!x&&!y&&!z)return f[x][y][z][d]=(d==0);
if (d==0)return f[x][y][z][d]=(!x&&!y&&!z);
int now=0;
if (x)now=(now+solve(x-1,y,z,d-1))%mod;
if (!x&&y)now=(now+solve(x,y-1,z,d-1))%mod;
if (!x&&!y&&z)now=(now+solve(x,y,z-1,d-1))%mod;
if (x&y&z==2)cout<<now<<endl;
int tmp=0,tot=x+y+z;
for (int i=0;i<=x;i++){
for (int j=0;j<=y;j++){
for (int k=0;k<=z;k++){
int t1=i+j+k,t2=x-i+y-j+z-k;
if (t1==tot||t2==tot)continue;
for (int p=1;p<=t1;p++){
for (int q=1;q<=t2;q++){
if (max(p,q)==d)tmp=(tmp+solve(i,j,k,p)*solve(x-i,y-j,z-k,q))%mod;
}
}
}
}
}
return f[x][y][z][d]=(now+tmp)%mod;
}
int main(){
freopen ("secret.in","r",stdin);
freopen ("secret.out","w",stdout);
int l1,l2,l3,d;
scanf("%d%d%d%d",&l1,&l2,&l3,&d);
memset(f,-1,sizeof(f));
printf("%d\n",solve(l1,l2,l3,d)%mod);
}