P1373 小a和uim之大逃离(动态规划)
题目链接:传送门
题目大意:
一个N行M列的矩阵,从任意点开始往右或者往下走,每走一格获得所到达的格子的分数。
要求总步数必须为偶数。问有多少种走法,使得奇数步得到的总分和偶数步得到的总分对K+1取模的值相等。
1 ≤ N, M ≤ 800, 1 ≤ K ≤ 15;
思路:
状态:
f[i][j][k]表示以(i,j)为终点时,奇数步与偶数步的差值为k时(当然k属于K+1的完全剩余系),的方案数。
初始状态:
若从(i-1,j)或(i,j-1)走到(i,j)时产生的差值为k,则f[i][j][k]++。
这是因为状态转移时只继承了之前的格子的状态,没有继承到之前没有格子的状态(第一步不用继承其他的状态)。
状态转移方程:
f[i+1][j+1][k1] += f[i][j][k];其中k1 = k + 从(i, j)走到(i+1,j+1)时,产生的奇偶步差值。
(PS:这里有→↓和↓→两种走法)
f[i+2][j][k3] += f[i][j][k];其中k3 = k + 从(i, j)走到(i+2,j)时,产生的奇偶步差值。
f[i][j+2][k4] += f[i][j][k];其中k4 = k + 从(i, j)走到(i,j+2)时,产生的奇偶步差值。
当然以上的种种都要取模。
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAX_N = + ;
const int MOD = + ;
#define mod(x) (x)%MOD
#define modk(x) ((x)+K)%K
#define dep1 mat[i+1][j]-mat[i+1][j+1]
#define dep2 mat[i][j+1]-mat[i+1][j+1]
#define dep3 mat[i+1][j]-mat[i+2][j]
#define dep4 mat[i][j+1]-mat[i][j+2] int N, M, K;
int mat[MAX_N][MAX_N];
int f[MAX_N][MAX_N][]; void init()
{
for (int i = ; i <= N; i++) {
for (int j = ; j <= M; j++) {
if (i >= )
f[i][j][modk(mat[i-][j] - mat[i][j])]++;
if (j >= )
f[i][j][modk(mat[i][j-] - mat[i][j])]++;
}
}
} void dp()
{
init(); for (int i = ; i <= N; i++) {
for (int j = ; j <= M; j++) {
for (int k = ; k < K; k++) {
if (i+ <= N && j+ <= M) {
f[i+][j+][modk(k+dep1)] = mod(f[i+][j+][modk(k+dep1)] + f[i][j][k]);
}
if (i+ <= N && j+ <= M) {
f[i+][j+][modk(k+dep2)] = mod(f[i+][j+][modk(k+dep2)] + f[i][j][k]);
}
if (i+ <= N && j <= M) {
f[i+][j][modk(k+dep3)] = mod(f[i+][j][modk(k+dep3)] + f[i][j][k]);
}
if (i <= N && j+ <= M) {
f[i][j+][modk(k+dep4)] = mod(f[i][j+][modk(k+dep4)] + f[i][j][k]);
}
}
}
}
ll res = ;
for (int i = ; i <= N; i++)
for (int j = ; j <= M; j++)
res = mod(res + f[i][j][]);
// for (int i = 1; i <= N; i++) {
// for (int j = 1; j <= M; j++) {
// cout << f[i][j][0] << ' ';
// }
// cout << endl;
// }
cout << res << endl;
return;
} int main()
{
cin >> N >> M >> K;
K++;
for (int i = ; i <= N; i++)
for (int j = ; j <= M; j++) {
scanf("%d", &mat[i][j]);
mat[i][j] %= K;
}
dp();
return ;
}
P1373 小a和uim之大逃离(动态规划)的更多相关文章
- P1373 小a和uim之大逃离 (动态规划)
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 洛古 P1373 小a和uim之大逃离
P1373 小a和uim之大逃离 题目提供者lzn 标签 动态规划 洛谷原创 难度 提高+/省选- 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电 ...
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- 洛谷P1373 小a和uim之大逃离
P1373 小a和uim之大逃离 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从 ...
- 【题解】 P1373 小a和uim之大逃离
题解 P1373 小a和uim之大逃离 传送门 一道dp好题 乍看此题,感觉要这样设计: \(dp(x)(y)(mod_{a})(mod_{uim})(0/1)\) , 但是我上午考试就MLE了,赶紧 ...
- 【题解】P1373 小a和uim之大逃离
[题解]P1373 小a和uim之大逃离 考虑到可能会MLE,考虑状态压缩一下 由于只要得到他们的差就行了,所以直接少记录一维就好了 \(dp(i,j,r,1/0)\)表示在\(i,j\)点,当前ui ...
- 洛谷P1373 小a和uim之大逃离[背包DP]
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 洛谷 P1373 小a和uim之大逃离 Label:dp 不会
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- P1373 小a和uim之大逃离
转自:http://www.cnblogs.com/CtsNevermore/p/6028138.html 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一 ...
- P1373 小a和uim之大逃离 二维dp
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
随机推荐
- 微信小程序自动定位,通过百度地图根据经纬度获取该地点所在城市信息
微信小程序获得经纬度 var that = this wx.getLocation({ type: 'wgs84', success(res) { console.log(res) that.setD ...
- summary_22rd Nov 2018
一. 列表:记录同种属性的多个值 定义:在[]中用逗号分隔开多个任意的值 类型转换:L=list( ) 括号中的内容必须是可迭代类型,包括字符串,列表,字典等 常用操作和内置方法: 1.按照索引位置 ...
- 巧用call,appl有 根据对象某一属性求最大值
查找对象数组中某属性的最大最小值的快捷方法 例如要查找array数组中对象的value属性的最大值 var array=[ { "index_id": 119, "are ...
- 【内存泄漏】 C/C++内存泄漏及其检测工具
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Po ...
- Android 平台架构
Android 平台主要组件如下 Linux 内核 Android 平台的基础是 Linux 内核.例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低 ...
- python select poll epoll的区别
select 优点:为最早的异步io处理模块,他可以再linux上和windows上使用,跨平台兼容性好,而poll和epoll都不能在windows系统环境中使用. 缺点:select的机制决定了他 ...
- Could not load driverClass ${driverClassName} 的解决方案
对项目进行ssm整合的过程中,发现报这个错误:Could not load driverClass ${driverClassName} 不明所以,在网上找了半天,各种答案都有,最后终于找 ...
- jsp自定义标签开发
参考:http://blog.csdn.net/lw001x/article/details/7589302
- 【原创】QT 打印输出
list类 qDebug 的两种用法 #include <QDebug> int main(int argc,char *argv[]) { QList<int> list; ...
- el表达式原样输出,不被解析
今天遇到了,在jar包都有的前提下EL表达式原样输出,不被解析,原因是: page指令中确少 isELIgnored="false" 加上就好了 <%@ page langu ...