0
点赞
收藏
分享

微信扫一扫

http://39.98.219.132 题库标准答案(题库序号:1379)之广场车神

小飞侠熙熙 2022-03-23 阅读 71
c++

序号:1379

广场车神

Time Limit:1s Memory Limit:512MB

题目描述:

小 D 是一位著名的车手,他热衷于在广场上飙车。每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛。 小 D 所在的广场可以看作一个W×H 的网格,初始时小 D 位于左下角的 (1,1) 处,他的目的地是位于右上角的 (W,H)。每次移动时,小 D 会选择位于他右上方的一个方格,并移动到这个方格。由于车技的限制,每次移动小 D 的横坐标变化和纵坐标变化都不能超过 K。也就是说,每次小 D 会在以当前位置为左下角的边长为 K+1 的正方形中选择一个方格作为移动的目的地,但不能原地不动。 作为小 D 的竞争对手,小 J 想知道小 D 一共有多少种从 (1,1) 移动到 (W,H) 的方案数,以提高他在大赛中胜出的概率。请你完成程序,协助小 J 在这场大赛中战胜小 D。由于方案数过大,你需要将答案对 998244353 进行取模。

输入格式:

输入包含三个正整数 W,H,K。

输出格式:

输出一个整数表示答案。

输入样例:

3 3 2

输出样例:

26

样例解释

数据范围约定

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
const ll INF=1e9;
ll n,m,T,x,y;
int k;
ll s[5555][5555];
ll dp[5555][5555];
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m>>k;
	k++;
	s[1][1]=dp[1][1]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i==1 and j==1){
				continue;
			}
			int x=max(i-k+1,1);
			int y=max(j-k+1,1);
			dp[i][j]=(s[i-1][j]+s[i][j-1]-s[i-1][j-1]-s[x-1][j]-s[i][y-1]+s[x-1][y-1]+mod*3)%mod;
			s[i][j]=(s[i-1][j]+s[i][j-1]-s[i-1][j-1]+mod+dp[i][j])%mod;
		}
	}
	cout<<dp[n][m];
	return 0;
}
举报

相关推荐

0 条评论