样例没过,玄关
查看原帖
样例没过,玄关
1134329
long_ting楼主2024/2/29 11:17

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> Pii;


//#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)


#define int long long
//const int mod=1e9+7;


int n,m,k,p,s;
int f[105][105][105],h[105][105][105];
int v[105][105];
void solve(){
	int x,y;
	cin>>n>>m>>k>>p>>s;
	for(int i=1;i<=s;i++){
		cin>>x>>y;
		v[x][y]=1;
	}
	
		for(int i=n;i>=1;i--){
			for(int j=m;j>=1;j--){
				h[i][j][0]=1;
				//if(v[i][j]) continue;
				
				for(int t=1;t<=k;t++){
				
					
					if(i+1<=n&&v[i+1][j]==0)
					for(int tt=0;tt<=t-1;tt++){
						
						h[i][j][t]+=(h[i+1][j][tt])*h[i][j][t-tt-1]%p;
					}
					if(j+1<=m&&v[i][j+1]==0)
					for(int tt=0;tt<=t-1;tt++){
						
						h[i][j][t]+=(h[i][j+1][tt])*h[i][j][t-tt-1]%p;
					}
					h[i][j][t]%=p;
				}
			}
		}
		f[1][1][0]=1;
	
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++){
				if(v[i][j]) continue;
				for(int t=1;t<=k;t++){
					
					for(int tt=0;tt<=t;tt++){
						f[i][j][t]+=(f[i][j][tt])*h[i][j][t-tt]%p;
					}
					for(int tt=0;tt<=t;tt++){
						if(i+1<=n&&v[i+1][j]==0)
							f[i+1][j][t]+=f[i][j][t];
						if(j+1<=m&&v[i][j+1]==0)
							f[i][j+1][t]+=f[i][j][t];
					}
					f[i][j][t]%=p;
				}
			}
	
	int ans=0;
	for(int i=0;i<=k;i++)
		ans+=f[n][m][i];
	cout<<ans%p;
}
signed main(){
	IOS;
	int t=1;
	
    //cin>>t;
	while(t--){
		solve();
       // cout<<"-------------------------"<<endl;
	}
	return 0;
}
2024/2/29 11:17
加载中...