传送门:洛谷p1373
这道题我原本的想法就是很简单的f[i][j][x][y][0/1];就是以第i,j格为终点的方案数目,可是即wa又mle ,最后看了看题解才比较了解。就是我们不去储存两个人瓶子各自有多少,而是去去一个差值,然后差值取模后相等的都是等价的,这里的取模是对k+1取模,因为瓶子差值就是[0,k],所以对k+1取模。
用f[i][j][p][0/1]表示以ij结束的格子差值为p的由0或者1走到这一格子的方案数目。(0表示小a走的,1表示小b走的)
然后我们去对每个ij枚举他们瓶子的差值p
也就是
f[i][j][p][0]+=f[i-1][j][(p-value[i][j]+k)%k][1] (i-1>=1)

f[i][j][p][0]+=f[i][j-1][(p-value[i][j]+k)%k][1] (j-1>=1)

f[i][j][p][1]+=f[i-1][j][(p+value[i][j])%k][0] (i-1>=1)

f[i][j][p][1]+=f[i][j-1][(p+value[i][j])%k][0] (j-1>=1)
怎么理解这个式子。主要是在后面转移那里比较难理解。
我们看这个f[i][j][p][0];他表示在ij结束的格子,差值为p,由小A走到的这一格子的方案数目。
我们设在ij这个格子小a瓶子有ka2,在小u瓶子有ku2;
所以ka2 - ku2 = p;
我们设在i-1,j(i,j-1同理),j这个格子小a瓶子有ka1,在小u瓶子有ku1;
由于ij是由小a走的,所以
ka1 = ka2 - value[i][j];
ku1 = ku2;
联立一下也就是
ka1- ku1 = ka2 - value[i][j] - ku2 = p - value[i][j];

再看f[i][j][p][1] 他表示在ij结束的格子,差值为p,由小U走到的这一格子的方案数目。
我们设在ij这个格子小a瓶子有ka2,在小u瓶子有ku2;
所以ka2 - ku2 = p;
我们设在i-1,j(i,j-1同理),j这个格子小a瓶子有ka1,在小u瓶子有ku1;
由于ij是由小u走的,所以
ka1 = ka2;
ku1 = ku2 - value[i][j];
联立可得
ka1 - ku1 = ka2 - (ku2 - value[i][j]) = p - value[i][j];
但是由于 p - value[i][j]可能减出个负数,所以我们+k在模k就好了;
我相信这样子这个方程已经能很清晰的理解了。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<stack>
#include<cstring>
#include<vector>
using namespace std;
#define ll long long
const int max_ = 800 + 7;
const int p = 1e9 + 7;
inline int read() {int s = 0, f = 1;char ch = getchar();while (ch<'0' || ch>'9') {if (ch == '-')f = -1;ch = getchar();}while (ch >= '0'&&ch <= '9') {s = s * 10 + ch - '0';ch = getchar();}return s * f;
}
int f[max_][max_][17][2], value[max_][max_], n, m, k;
int main() {n = read(), m = read(), k = read(); k++;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {value[i][j] = read();f[i][j][value[i][j]%k][0] = 1;}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {for (int z = 0; z <= k-1; z++) {if (i - 1 >= 1) {f[i][j][z][0] += f[i - 1][j][(z - value[i][j] + k) % k][1];f[i][j][z][0] %= p;f[i][j][z][1] += f[i - 1][j][(z + value[i][j]) % k][0];f[i][j][z][1] %= p;}if (j - 1 >= 1) {f[i][j][z][0] += f[i][j-1][(z - value[i][j] + k) % k][1];f[i][j][z][0] %= p;f[i][j][z][1] += f[i][j-1][(z + value[i][j]) % k][0];f[i][j][z][1] %= p;}}        }}int t = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {t = (t + f[i][j][0][1]) % p;}}cout << t;return 0;
}

洛谷p1373 DP相关推荐

  1. 洛谷 1373 dp 小a和uim之大逃离 良心题解

    洛谷 1373 dp 这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱 传送门 其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好 ...

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

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

  3. 洛谷 P1373 小a和uim之逃离(DP)

    题目大意: 每个人a,u在棋盘上可以向右或者向下走,每走到下一步,每个人有两个魔力值,若原始魔力值为a,这一格的魔力值为b,那么 这个人的魔力值就是(a+k)%k,魔力值分别是小a再到小u轮流加.我们 ...

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

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

  5. 洛谷P1373 小a和uim之大逃离 动态规划

    题解 我们可以先简单的想一种状态,也就是dp[i][j][x][y][t]dp[i][j][x][y][t]dp[i][j][x][y][t],这是最暴力的. 当t=0t = 0t=0时,表示小a处于 ...

  6. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  7. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  8. 【洛谷 P4934】 礼物 (位运算+DP)

    题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...

  9. 【题解】洛谷P1541 [NOIP2010TG] 乌龟棋(类似背包的DP)

    题目来源:洛谷P1541 思路 类似背包的题 总之就是四种卡牌取的先后顺序不同导致的最终ans不同 所以我们用一个四维数组每一维分别表示第几种取了几张的最大分数 然后就是简单DP解决 代码 #incl ...

最新文章

  1. SAP ABAP收货或者货物移动(MIGO,MB11,MB1A)在保存时候的增强点
  2. size_t是什么数据类型?为什么要用size_t替代int、unsigned int、unsigned long、unsigned long long
  3. 【记录】Docker push 到dockerhub网站
  4. Node.js调试工具安装使用
  5. DSP实验报告—实验1
  6. [ 资料分享 ] Vue 源码分析与讲解 - 附下载地址
  7. CAXA2007、2011,2013二次开发
  8. 关键路径过程详解、算法及其实现
  9. 【SQL面试】求出各科成绩前三名的学生和成绩
  10. 后天淘宝客cms系统源码
  11. HTML基础常识问答(三)
  12. SNF快速开发平台2019-权限管理模型-平台服务(多平台\多组织\SAAS\多系统)
  13. Postman变量的使用
  14. 前端小白奋斗史03(css)
  15. 单词数 HDU - 2072(字典树模板题amp;stl)
  16. JavaSE——IO流
  17. java ts流封装工具_从 Java 到 TS,阿里妈妈的接口管理一把梭
  18. 解决在使用wandb时出现SSLError的思路
  19. OA系统管理项目工作内容
  20. 绘画工具商城小程序开发,释放绘画市场消费潜力

热门文章

  1. 响应式内容滑动插件bxSlider
  2. php ywsbxny cn,jquery幻灯片插件bxslider样式改进实例_jquery
  3. C/C++基础讲解(九十九)之经典篇(第几天/排序)
  4. speedoffice表格中如何随意拖动表格
  5. GeoTools 笔记
  6. 诚聘Windows Mobile开发工程师
  7. 【Buildroot】学习记录(2)配置注释
  8. SuperMap离线地图篇一:天地图
  9. 【Linux】Slurm作业调度系统使用
  10. Jenkins安全插件——Arachni扫描器介绍