题目链接: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. JavaBean之lombok

    参见:https://www.ibm.com/developerworks/cn/opensource/os-lombok/ http://blog.didispace.com/java-lombok ...

  2. SNF快速开发平台MVC-高级查询组件

    1.   高级查询 在我们做项目的时候经常想要按名称.编号进行查询数据,可在开发时会把最常用的查询条件写上,不常用的就不写了,也是因为把所有字段都写上太多了,布局不好看而且不实用.还有些查询条件几百年 ...

  3. MySQL-8.0.x 新特性之索引页合并

    [背景] 索引的重要是在些不表.在这里我想说的另一个问题:索引和数据一样在innodb中都是以page的形式来组织的,那么问题就来了. 比如果说索引 ix_person_name 的内容只要8个页面就 ...

  4. [ci]jenkins-slave的添加(vm模式,通过ssh和jnlp)

    jenkins-slave的添加-在vm上通过jnlp方式 参考:http://www.cnblogs.com/sparkdev/p/7102622.html 下载 slave.jar和slave-a ...

  5. 模仿jQuery的ajax的封装

    /* * 我们使用了ajax 的xmlHttpRequest 跟服务器进行交互. * * 交互了有四个基本步骤 * 1:创建对象 * 2:建立连接 * 3:发送请求 * 4:接收数据 * * 这些操作 ...

  6. 关于批判性思维(Critical Thinking)

    批判性思维(CriticalThinking)就是通过一定的标准评价思维,进而改善思维,是合理的.反思性的思维,既是思维技能,也是思维倾向. 批判性思维是在普通思维的基础上又加了第二层思考,并对第一层 ...

  7. CefSharp 封装自己的简单H5浏览器 详细配置

    下载了最新的CefSharp源码,发现在自己机器可以运行,到普通的WIN7系统 报了  System.IO.FileNotFoundException: Could not load file or  ...

  8. .net core读取json格式的配置文件

    在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...

  9. fputc和putc和putchar函数的用法

    功 能: 输出一字符到指定流中 putc()与fputc()等价.不同之处为:当putc函数被定义为宏时,它可能多次计算stream的值. 关于fputc(): 原型:int fputc(char c ...

  10. gSOAP 初体验

    安装 由于本人使用的是 Mac OS 系统,故以 Mac OS 为例说明如何安装 gSOAP. 1)下载 gSOAP 可以在 https://sourceforge.net/projects/gsoa ...