| 比赛 |
组合计数1 |
评测结果 |
AEEEEEEEEA |
| 题目名称 |
方案数 |
最终得分 |
20 |
| 用户昵称 |
梦那边的美好ME |
运行时间 |
1.205 s |
| 代码语言 |
C++ |
内存使用 |
4.05 MiB |
| 提交时间 |
2026-02-26 11:33:44 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
ll n,m,r,o,f[210][210][210];
bool cover[210][210][210];
int main(){
freopen("problema.in","r",stdin);
freopen("problema.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>r>>o;
for(int i=1;i<=o;i++){
ll a,b,c;
cin>>a>>b>>c;
cover[a][b][c]=1;
}
f[0][0][0]=1;
for(int i=0;i<=n;i++){
if((i&n)==i){
for(int j=0;j<=m;j++){
if((j&m)==j){
for(int k=0;k<=r;k++){
if((k&r)==k&&!cover[i][j][k]){
for(int x=i+1;x<=n;x++){
if((i&x)==i){
f[x][j][k]=(f[x][j][k]+f[i][j][k])%mod;
}
}
for(int y=j+1;y<=m;y++){
if((j&y)==j){
f[i][y][k]=(f[i][y][k]+f[i][j][k])%mod;
}
}
for(int z=k+1;z<=r;z++){
if((k&z)==k){
f[i][j][z]=(f[i][j][z]+f[i][j][k])%mod;
}
}
}
}
}
}
}
}
cout<<f[n][m][r]<<'\n';
return 0;
}