32分 帮忙看看为什么会RE 谢谢各位大佬
查看原帖
32分 帮忙看看为什么会RE 谢谢各位大佬
421758
HANDSOME_FZZ楼主2023/7/10 10:30
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int N=998244353;
const int M1=105,M2=2005;
int n,m,mp[M1][M2],sc[M1];
long long ans;
void loading(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)//烹饪方法
		for(int j=1;j<=m;j++){//食材
			cin>>mp[i][j];
		}
}

void backfire(int k,int num,long long w,int p){//dfs+回溯 k道菜 已经做了num道 方案数
	if(num==k){ans=(ans+w)%N; return;}//cout<<ans<<endl; 
	if(p>n) return;//越界
//	for(int i=p;i<=n;i++){//枚举烹饪方法
		for(int j=1;j<=m;j++)
		if(mp[p][j]&&sc[j]+1<=k/2){//做a(i,j)这个菜 &&!ff[i]
			//cout<<p<<' '<<j<<endl;
			sc[j]++; //ff[i]=1;
			backfire(k,num+1,(w*mp[p][j])%N,p+1);
			sc[j]--; //ff[i]=0;
		}
		backfire(k,num,w,p+1);
//	}
}

int main(){
	//freopen("meal.in","r",stdin);
	//freopen("meal.out","w",stdout);
	loading();
	for(int i=2;i<=n;i++) backfire(i,0,1,1);//做k道菜
	cout<<ans;
	fclose(stdin); fclose(stdout);
	return 0;
}
2023/7/10 10:30
加载中...