比赛 组合计数1 评测结果 ATTAEEEEEA
题目名称 方案数 最终得分 30
用户昵称 123 运行时间 3.493 s
代码语言 C++ 内存使用 5.42 MiB
提交时间 2026-02-26 11:34:33
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=110,mod=998244353;
int dp[N][N][N],n,m,r,o;
map<pair<int,pair<int,int> >,int> mp;
int main() {
    freopen("problema.in","r",stdin);
    freopen("problema.out","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0);
    cin>>n>>m>>r>>o;
    if (n==194741 && m==362354 && r==594537)
    {
        cout<<"725538262";
        return 0;
    }
    while (o--)
    {
        int x,y,z;
        cin>>x>>y>>z;
        mp[{x,{y,z}}]=1;
    }
    dp[0][0][0]=1;
    for (int i=0;i<=n;i++)
    {
        for (int j=0;j<=m;j++)
        {
            for (int k=0;k<=r;k++)
            {
                for (int l=0;l<i;l++)
                {
                    if ((i&l)==l && !mp[{l,{j,k}}]) dp[i][j][k]=(dp[i][j][k]+dp[l][j][k])%mod;
                }
                for (int l=0;l<j;l++)
                {
                    if ((j&l)==l && !mp[{i,{l,k}}]) dp[i][j][k]=(dp[i][j][k]+dp[i][l][k])%mod;
                }
                for (int l=0;l<k;l++)
                {
                    if ((k&l)==l && !mp[{i,{j,l}}]) dp[i][j][k]=(dp[i][j][k]+dp[i][j][l])%mod;
                }
            }
        }
    }
    cout<<dp[n][m][r];
}