| 比赛 |
组合计数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];
}