求助80分
查看原帖
求助80分
728853
CaiZi楼主2023/10/19 20:59

80分记录:https://www.luogu.com.cn/record/130438006

#include<bits/stdc++.h>
#define int long long
#define MOD 998244353
using namespace std;
int n,m,q,a[46][46],b[46][46],dp[2][46][91][46][46],p,u;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>b[i][j];
		}
	}
	dp[1][1][0][0][0]=1;
	for(int i=1;i<=n;i++){
		u=i%2;
		for(int j=1;j<=m;j++){
			if(i!=1){
				dp[u][j][0][0][0]=0;
			}
			for(int k=1;k<=q;k++){
				for(int l=0;l+i<=n;l++){
					for(int r=0;r+j<=m;r++){
						p=0;
						if(l!=0&&k>=a[i][j]){
							p+=dp[u][j][k-a[i][j]][l-1][r];
						}
						if(r!=0&&k>=b[i][j]){
							p+=dp[u][j][k-b[i][j]][l][r-1];
						}
						if(l!=0&&r!=0&&k>=a[i][j]+b[i][j]){
							p-=dp[u][j][k-a[i][j]-b[i][j]][l-1][r-1];							
						}
						if(i!=1){
							p+=dp[!u][j][k][l+1][r];
						}
						if(j!=1){
							p+=dp[u][j-1][k][l][r+1];
						}
						dp[u][j][k][l][r]=p%MOD;
						if(k==q&&l==0&&r==0){
							cout<<dp[u][j][k][l][r]<<" ";
						}
					}
				}
			}
		}
		cout<<endl;
	}
	return 0;
}
2023/10/19 20:59
加载中...