洛谷 1373 dp

这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱


传送门


其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好,整个人思路较乱,靠本能打了一遍代码毫无头绪。恢复了一下状态重新开打,才算是A掉

题解

设dp[i][j][l][p]为当前走到第(i, j)位,当前(a - b) % k 为l,本次是第p个人取得药,p = 0为a,p = 1 为b,
此时的方案数

则 dp[i][j][l][1] += dp[i-1][j][((l + a[i][j]) % k + k) % k][0] + dp[i][j-1][((l + a[i][j]) % k + k) % k][0]

dp[i][j][l][0] += dp[i-1][j][((l - a[i][j]) % k + k) % k][1] + dp[i][j-1][((l - a[i][j]) % k + k) % k][1]

举个栗子:

假设本次在(3, 2),该1(uim)走,则该状态的上一个状态应为 当前在(3,1),该0(小a)走,当时的差为l + a[i][j] 另一个状态同理。

解释一下差加减的原理:

我们的dp方程的第三维定义的是a(小a) - b(uim)的差,那么按照上面的栗子来看,本步由uim来走,那么它们状态的差应减少,减少值为a[i][j],所以上一状态为l + a[i][j],

扯一点关于初始化的东西

由于题目中规定可以从每个点开始,同时必须小a先吸收,所以

对于读入的每一个a[i][j],设dp[i][j][a[i][j] % k][0] = 1

其余点均为0

关于k

实在有些不理解出题人的脑洞,,(lzn别打我= =),,只有k的容量,到了k+1就会清零,,,默默地k++吧

关于复杂度

记录两个人的当前值肯定会T,使用long long会M,据说常数太大会卡两个,暂时没发现

关于差值问题:

有人说差值可正可负,我当时也考虑了一段时间,后来发现在%k意义下对答案没有任何影响,即 k = 3时,(k + 1等于4时)a比b少2和a比b多2其实是等效的,即a拿2个后两人均相同

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>const int maxn = 800 + 1;
const int mod = 1000000007;
int dp[maxn][maxn][16][2];
int a[maxn][maxn];
int n, m, k;int main () {scanf("%d %d %d", &n, &m, &k);k++;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {scanf("%d", &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 l = 0; l < k; l++) {dp[i][j][l][1] = (dp[i][j][l][1] + dp[i-1][j][((l + a[i][j]) % k + k) % k][0] + dp[i][j-1][((l + a[i][j]) % k + k) % k][0]) % mod;dp[i][j][l][0] = (dp[i][j][l][0] + dp[i-1][j][((l - a[i][j]) % k + k) % k][1] + dp[i][j-1][((l - a[i][j]) % k + k) % k][1]) % mod;}}}long long ans = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {ans = (ans + dp[i][j][0][1]) % mod;}printf("%lld", ans);return 0;
}

转载于:https://www.cnblogs.com/CtsNevermore/p/6028138.html

洛谷 1373 dp 小a和uim之大逃离 良心题解相关推荐

  1. 【洛谷P3818】小A和uim之大逃离 II

    题目背景 话说上回--还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...

  2. 洛谷P1373 小a和uim之大逃离

    P1373 小a和uim之大逃离 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从 ...

  3. 小a和uim之大逃离,洛谷之提高历练地,动态规划TG.lv(1)(3-2)

    正题 第二题:小a和uim之大逃离 这题有点烦,但是我们可以从k入手,大小为k的魔瓶,可以装的容量为0到k,那么相当于我们每一次mod 一下k 就行了. 我们当然也可以从小a和小uim的魔瓶差入手,我 ...

  4. 洛古 P1373 小a和uim之大逃离

    P1373 小a和uim之大逃离 题目提供者lzn 标签 动态规划 洛谷原创 难度 提高+/省选- 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电 ...

  5. 洛谷1373 小a和uim之大逃离

    https://www.luogu.org/problem/show?pid=1373 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声 ...

  6. 洛谷1373小a和uim之大逃离

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  7. 【题解】洛谷P1373 小a和uim之大逃离(dp 递推)

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  8. luogu P1373 小a和uim之大逃离

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  9. [P1373]小a和uim之大逃离

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

最新文章

  1. 共用体的定义和应用【C++】
  2. Combiner合并案例
  3. python 包中当前目录对应的一个点号
  4. mysql协议重传_TCP协议详解
  5. 【快写】基本思路及模板
  6. 【Excel-2010】日期函数
  7. Unity3D基础1:进入Unity3D
  8. (三)Omniglot Dataset介绍
  9. 开源一个WEB版本GEF,基于SVG的网页流程图框架
  10. editplus软件下载地址
  11. Intellij IDEA免费版方法(1)
  12. 任正非的艰难时刻的启示
  13. 原理与结构解析——智能门锁方案
  14. O2O商业模式目前的状态需看透什么?未来会呈现怎样的特征?
  15. 单片机课程设计:四位密码锁代码
  16. 精华文章置顶--CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能...
  17. 技术分享 | 语音AI如何驱动虚拟人
  18. 小工具:用C++读取TGA并输出数据到文本
  19. Compound学习(二) 简单部署
  20. linux raid5 恢复,恢复磁盘阵列RAID 5损坏硬盘

热门文章

  1. 2020年电商上市公司市值梯队
  2. 如何判断一个创业公司是否有发展潜力
  3. 人不能轻易暴露自己的底牌,否则会陷入被动的局面
  4. 社群产品定位三种方式
  5. 怎么判断自己是不是备胎 ?
  6. 买断式软件逐渐向订阅式软件发展,是不是资本想一直割韭菜?
  7. python入门——P44魔法方法:简单定制
  8. Qt4_使用SAX读取XML
  9. Qt4_写TCP客户/服务器应用程序
  10. mercurial和svn_DBA Mercurial简介–分支和合并