| 比赛 |
组合计数1 |
评测结果 |
WEEEEEEEEW |
| 题目名称 |
方案数 |
最终得分 |
0 |
| 用户昵称 |
Ruyi |
运行时间 |
1.230 s |
| 代码语言 |
C++ |
内存使用 |
4.08 MiB |
| 提交时间 |
2026-02-26 11:31:46 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 101
#define mod 998244353
using namespace std;
ll n,m,r,o,dp[N][N][N],p2[63],wh;
struct node{ll x,y,z;}a[N];
int main(){
freopen("problema.in","r",stdin);
freopen("problema.out","w",stdout);
cin>>n>>m>>r>>o;
for(int i=1;i<=o;i++){
cin>>a[i].x>>a[i].y>>a[i].z;
dp[a[i].x][a[i].y][a[i].z]=-1;
}
p2[0]=1;
for(int i=1;i<63;i++) p2[i]=p2[i-1]*2;
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++)
if(i!=0||j!=0||k!=0){
while(p2[wh]<=i){
if((p2[wh]&i)!=0&&dp[i-(p2[wh]&i)][j][k]>0) dp[i][j][k]+=dp[i-(p2[wh]&i)][j][k];
wh++;
}
wh=0;
while(p2[wh]<=j){
if((p2[wh]&j)!=0&&dp[i][j-(p2[wh]&j)][k]>0) dp[i][j][k]+=dp[i][j-(p2[wh]&j)][k];
wh++;
}
wh=0;
while(p2[wh]<=k){
if((p2[wh]&k)!=0&&dp[i][j][k-(p2[wh]&k)]>0) dp[i][j][k]+=dp[i][j][k-(p2[wh]&k)];
wh++;
}
wh=0;
}
cout<<dp[n][m][r]<<endl;
return 0;
}