小a和uim之大逃离(luogu P1373 dp)
小a和uim之大逃离(luogu P1373 dp)
给你一个n*m的矩阵,其中元素的值在1~k内。限制只能往下和往右走,问从任意点出发,到任意点结束,且经过了偶数个元素的合法路径有多少个。在此题中,定义在一条路径中,第奇数个元素之和为X,第偶数个元素之和为Y。X+Y同模k+1的路径是合法路径。答案模1e9+7。n,m<=800,1<=k<=15。
状态是\(f[i][j][h][0/1]\),表示第i行第j列的元素,奇数元素和X-偶数元素和Y差为h,当前在路径中是第奇数个点或第偶数个点的方案数。
设\(p1=(p-a[j]+k+1)\% (k+1)\),\(p2=(p+a[j])\%(k+1)\)。那么状态转移方程就是:$$f[i][j][p][0]=f[i][j-1][p1][1]+f[i-1][j][p1][1]+(p1?0:1)$$$$f[i][j][p][1]=f[i][j-1][p2][0]+f[i-1][j][p2][0]$$
状压一下即可。
#include <cctype>
#include <cstdio>
#include <cstring>
using namespace std;
const int mod=1e9+7;
const int maxn=805, maxk=20;
typedef int ia3[maxn][maxk][2];
int n, m, k, ans, a[maxn];
ia3 fnow, fpre;
void getint(int &x){
char ch; int flag=1; x=0;
for (ch=getchar(); !isdigit(ch); ch=getchar())
if (ch=='-') flag=-1;
for (x=ch-48; ch=getchar(), isdigit(ch);)
x=x*10+ch-48;
x*=flag;
}
int main(){
scanf("%d%d%d", &n, &m, &k);
int p1, p2;
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j){
getint(a[j]);
for (int p=0; p<=k; ++p){
p1=(p-a[j]+k+1)%(k+1); //这一步若小A走
p2=(p+a[j])%(k+1); //这一步若uim走
fnow[j][p][0]=(fnow[j-1][p1][1]
+fpre[j][p1][1]+(p1?0:1))%mod;
fnow[j][p][1]=(fnow[j-1][p2][0]
+fpre[j][p2][0])%mod;
if (p==0) ans=(ans+fnow[j][p][1])%mod;
}
memcpy(fpre[j], fnow[j], sizeof(fnow[j]));
}
printf("%d\n", ans);
return 0;
}
小a和uim之大逃离(luogu P1373 dp)的更多相关文章
- 洛谷 P1373 小a和uim之大逃离 Label:dp 不会
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- P1373 小a和uim之大逃离 二维dp
题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...
- 【题解】洛谷P1373 小a和uim之大逃离(坐标DP)
次元传送门:洛谷P1373 思路 设f[i][j][t][1/0]表示走到(i,j)时 小a减去uim的差值为t 当前是小a取(0) uim取(1) 那么转移就很明显了 f[i][j][t][]=(f ...
- 洛谷P1373 小a和uim之大逃离【线性dp】
题目:https://www.luogu.org/problemnew/show/P1373 题意: 有一个n*m的地图,每个点上有一个数值.两个人在任一点开始任一点结束,只能往右或往下走,轮流收集数 ...
- luogu1373_小a和uim之大逃离 多维dp
传送门 巧妙之处在于dp的设计只用设计差值即可,因此不会mle,枚举的顺序问题也解决了 #include <bits/stdc++.h> using namespace std; #def ...
- 【题解】 P1373 小a和uim之大逃离
题解 P1373 小a和uim之大逃离 传送门 一道dp好题 乍看此题,感觉要这样设计: \(dp(x)(y)(mod_{a})(mod_{uim})(0/1)\) , 但是我上午考试就MLE了,赶紧 ...
- 洛谷1373 小a和uim之大逃离
洛谷1373 小a和uim之大逃离 本题地址:http://www.luogu.org/problem/show?pid=1373 题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北 ...
- P3818 小A和uim之大逃离 II(洛谷月赛)
P3818 小A和uim之大逃离 II 题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然 ...
- luogu- P1373 小a和uim之大逃离 DP 四维,其中一维记录差值
P1373 小a和uim之大逃离: https://www.luogu.org/problemnew/show/P1373 题意: 在一个矩阵中,小A和小B轮流取数,小A可以从任意点先取,小B后取,最 ...
随机推荐
- PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析(转)
sort() 函数用于对数组单元从低到高进行排序. rsort() 函数用于对数组单元从高到低进行排序. asort() 函数用于对数组单元从低到高进行排序并保持索引关系. arsort() 函数用于 ...
- REST、DRF(View源码解读、APIView源码解读)
一 . REST 前言 1 . 编程 : 数据结构和算法的结合 .小程序如简单的计算器,我们输入初始数据,经过计算,得到最终的数据,这个过程中,初始数据和结果数据都是数据,而计算 ...
- iOS 开发实践之 Auto Layout
原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...
- BFC和haslayout(IE6-7)(待总结。。。)
支持BFC的浏览器(IE8+,firefox,chrome,safari) Block Formatting Context(块格式化上下文)是W3C CSS2.1规范中的一个慨念,在CSS3中被修改 ...
- 插头dp小结
插头dp: \(A:\)插头dp是什么? \(B:\)一种基于连通性状态压缩的动态规划问题 \(A:\)请问有什么应用呢? \(B:\)各种网格覆盖问题,范围允许状压解决,常用于计算方案数与联通块权值 ...
- spring boot集成多数据源过程以及错误
https://blog.csdn.net/aa456aaxxx/article/details/80346703 出现BindingException错误 解决如下 https://my.osch ...
- 51Nod 1225 余数之和 —— 分区枚举
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1225 1225 余数之和 基准时间限制:1 秒 空间限制:1 ...
- Spring Boot2.0之统一处理web请求日志
试问,你的项目中,如果有几万个方法,你还这么写log.info("name"+name+",age"+age )日志么?low~ 所以用AOP呀 1.首先创建个 ...
- Mysql转换表存储引擎的三种方式
或许会有一些场景需要改变表的存储引擎,例如存储日志的表如果几乎只有insert和少量的select操作,为了追求更好的插入性能有可能会需要把存储引擎更换为MyISAM.但是,本文不建议在同一个数据库中 ...
- 51nod1671【货物运输】
开始天真的我以为这道题和运输计划是一样的套路.于是写了一发,debug后发现过了第一个点,十分开心的交了一发,结果只过了第一个点.后来发现这个并不是一样的,因为修建黑洞之后路径法变了,而运输计划没有( ...