40pts求条
查看原帖
40pts求条
777848
superkkkeee楼主2024/7/21 14:40

帮帮这个萌新,条了一整天了!

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int a[47][47],b[47][47];
int f[2][47][47][47][91];
int ans[47][47];
const int mod=998244353;
signed main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	//freopen("P9743_7.in","r",stdin);
	cin>>n>>m>>k;
	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];
		}
	}
	f[1][1][0][0][0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(i!=1) f[i&1][j][0][0][0]=0;
			for(int q=1;q<=k;q++)
			{
				for(int x=0;i+x<=n;x++)
				{
					for(int y=0;j+y<=m;y++)
					{
						int rs=mod;
						if(x!=0&&q>=a[i][j]) rs+=f[i&1][j][x-1][y][q-a[i][j]];
						if(y!=0&&q>=b[i][j]) rs+=f[i&1][j][x][y-1][q-b[i][j]];
						if(x!=0&&y!=0&&q>=a[i][j]+b[i][j]) rs-=f[i&1][j][x-1][y-1][q-a[i][j]-b[i][j]];
						if(i!=1) rs+=f[(i-1)&1][j][x+1][y][q];
						if(j!=1) rs+=f[i&1][j-1][x][y+1][q];
						f[i&1][j][x][y][q]=rs%mod;
						if(q==k&&x==0&&y==0) ans[i][j]=rs%mod;
					}
				}
			}
		}
		
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cout<<ans[i][j]<<" ";
		}
		cout<<'\n';	
	}
	return 0;
}
2024/7/21 14:40
加载中...