题目链接:https://nanti.jisuanke.com/t/31434

小 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。

输出格式

输出一个整数表示答案。

数据规模

对于 30% 的数据:W,H≤8;

对于 60% 的数据:K=1;

对于 100% 的数据:1≤W,H,K≤2000。

输出时每行末尾的多余空格,不影响答案正确性

要求使用「文件输入输出」的方式解题,输入文件为 racing.in,输出文件为 racing.out

样例输入
3 3 2
样例输出
26
题目来源
计蒜客 NOIP 提高组模拟竞赛第一试

题解:

考虑普通的 $dp[i][j] = \sum\limits_{a = L+1}^i {\sum\limits_{b = D+1}^j {((a = = i\& \& b = = j)?0:dp[a][b])} }$,显然就是一整个大方块去掉一小格求和,

其中,$D = \max(0,i-k-1)$ 为下开边界,$L = \max(0,j-k-1)$ 为左开边界,

如果我们老老实实的纯暴力DP,显然就是 $O(WHK^2)$ 的时间复杂度,能过有鬼……

需要使用前缀和优化,不妨假设 $sum[i][j] = \sum\limits_{a = 1}^i {\sum\limits_{b = 1}^j {dp[a][b]} }$,

那么,显然有状态转移方程 $dp[i][j] = (sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1]) - (sum[D][j] + sum[i][L] - sum[D][L])$,

进而显然有状态转移方程:

$\begin{array}{l} sum[i][j] \\ = (sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1]) + dp[i][j] \\ = 2(sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1]) - (sum[D][j] + sum[i][L] - sum[D][L]) \\ \end{array}$

最后,易知答案为 $dp[h][w] = sum[h][w] - (sum[h - 1][j] + sum[i][w - 1] - sum[h - 1][w - 1])$。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const ll MOD=;
const int maxn=+; int w,h,k;
ll sum[maxn][maxn]; int main()
{
freopen("racing.in","r",stdin);
freopen("racing.out","w",stdout); scanf("%d%d%d",&w,&h,&k); memset(sum,,sizeof(sum));
sum[][]=;
for(int i=;i<=h;i++)
{
for(int j=;j<=w;j++)
{
if(i==&&j==) continue;
int L=max(,i-k-),D=max(,j-k-);
sum[i][j]=*(sum[i-][j]+sum[i][j-]-sum[i-][j-])-(sum[L][j]+sum[i][D]-sum[L][D]);
while(sum[i][j]<) sum[i][j]+=MOD; sum[i][j]%=MOD;
}
}
ll ans=sum[h][w]-sum[h-][w]-sum[h][w-]+sum[h-][w-];
while(ans<) ans+=MOD; ans%=MOD;
printf("%lld",ans);
}

这么简单一个题,我当初也不知道发什么神经……非要用%I64d输出long long类型,WA到死啊……难受啊……

计蒜客 31434 - 广场车神 - [DP+前缀和]的更多相关文章

  1. 计蒜客 宝藏 (状压DP)

    链接 : Here! 思路 : 状压DP. 开始想直接爆搜, T掉了, 然后就采用了状压DP的方法来做. 定义$f[S]$为集合$S$的最小代价, $dis[i]$则记录第$i$个点的"深度 ...

  2. 计蒜客 31436 - 提高水平 - [状压DP]

    题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...

  3. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

  4. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  5. 2019计蒜客信息学提高组赛前膜你赛 #2(TooYoung,TooSimple,Sometimes Naive

    计蒜客\(2019CSP\)比赛第二场 巧妙爆零这场比赛(我连背包都不会了\(QWQ\) \(T1\) \(Too\) \(Young\) 大学选课真的是一件很苦恼的事呢! \(Marco\):&qu ...

  6. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

  7. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  8. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  9. 计蒜客 等边三角形 dfs

    题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...

随机推荐

  1. 【Windows】Dos中的日期的和时间

    在Dos中,我们可以通过动态变量DATE来取得当前日期,通过动态变量TIME来取得当前日期.实例1 C:\Users\hubin5>echo %date% 2013/03/11 周一 C:\Us ...

  2. 安装SQL Server For Linux(Install SQL Server)

    SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图) 1.      安装SQL Server 官网安装指南:https://docs.microsoft.com ...

  3. 在Android上启用Kiosk模式

    我们的云帆机器人(上面运行的安卓程序)有一个线下场景是商场,由于商场人多,总会遇到一些用户在我们的app里乱点,然后会跳出程序进入到系统设置的一些界面,这样很不友好. 比如程序中有一些需要输入文字的地 ...

  4. php验证码--图片

    这里我们介绍图片验证码的制作,有关字符验证码能够參考下面文章: 点击打开链接 图片验证码的制作分三步: 1.制作图片库 2.随机选取一张图片 3.输出图片内容 代码例如以下(这里为了方便我直接用的本地 ...

  5. SNF快速开发平台3.0之--系统里广播的作用--迅速及时、简明扼要的把信息发送给接收者

    广播信息,即速度快捷.迅速及时.简明扼要的把信息发送给接收者. 当然在SNF快速开发平台上你也可以作为公告使用.不管当做什么使用要满足以下需求: 简单操作:页面操作简单 只需要输入内容就可以发送. 灵 ...

  6. QT和MFC的差别

    QT和MFC的差别 在使用MFC之前就已经使用Qt这个事实可能影响了我的客观性. (MFC效率较高,但大量的Windows API和消息机制使得其较难理解,不易用:QT封装较好,易用且跨平台,但效率较 ...

  7. numpy数组(5)-二维数组的轴

    numpy的mean(),std()等方法是作用于整个numpy数组的,如果是二维数组的话,也是整个数组,包括所有行和列,但我们经常需要它仅作用于行或者列,而不是整个二维数组,这个时候,可以定义轴ax ...

  8. 关于uframe源码的一些解读

    游戏管理. GameManager单例:绑定在不同的gameobject上,还是会每次都实例化一个GameManager但是可以为每一个GameManager赋值一个已经存在的单例---------- ...

  9. Selenium Web 自动化 - 项目实战环境准备

    Selenium Web 自动化 - 项目实战环境准备 2016-08-29 目录 1 部署TestNG  1.1 安装TestNG  1.2 添加TestNG类库2 部署Maven  2.1 mav ...

  10. Python3自定义json逐层解析器

    [本文出自天外归云的博客园] 用python3对json内容逐层进行解析,拿中国天气网的接口返回数据测试,代码如下: # -*- coding: utf-8 -*- import operator a ...