玄一关,30pts求调
查看原帖
玄一关,30pts求调
853792
JoeZYQ楼主2024/10/14 09:50
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7,N=805; 
unsigned int n,m,k,a[N][N],dp[N][N][20][2];
int main(){
	cin>>n>>m>>k;
	k++; 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			dp[i][j][a[i][j]%k][0]=1;
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int h=0;h<=k-1;h++){
				if(i+1<=n)
					(dp[i+1][j][(h+k-a[i+1][j])%k][1]+=dp[i][j][h][0]%mod)%mod,
					(dp[i+1][j][(h+a[i+1][j])%k][0]+=dp[i][j][h][1]%mod)%mod;
				if(j+1<=m)
					(dp[i][j+1][(h+k-a[i][j+1])%k][1]+=dp[i][j][h][0]%mod)%mod,
					(dp[i][j+1][(h+a[i][j+1])%k][0]+=dp[i][j][h][1]%mod)%mod;
			}
	int ans=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			(ans+=dp[i][j][0][1]%mod)%mod;
	cout<<ans;
	return 0;
}
/*
dp[i][j][h][0/1]表示走到第i行第j列时,差为h,最后一步为小a/uim走时的方案数 
*/
2024/10/14 09:50
加载中...