比赛 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);
}