P1373 小a和uim之大逃离:  https://www.luogu.org/problemnew/show/P1373

题意:

  在一个矩阵中,小A和小B轮流取数,小A可以从任意点先取,小B后取,最后一步必须是小B取的。每次都是只能向下走一格或者向右走一个格子。问小B拿好后,两人拿的数值和是一样的情况数。

思路:  

  DP,递推,感觉这道题比较难想的就是每个点要开一维记录两人不同差值的情况数。dp[i][j][h][l] 表示在点 (i,j),差值为h,小A还是uim取液体的方案数(0-->小A 1-->小B)

  1. dp[i][j][h][]+=(dp[i-][j][(h+a[i][j])%k][]) // uim取,差值就变小了,即从高的差值状态拉下来/
  2. dp[i][j][h][]+=(dp[i][j-][(h+a[i][j])%k][]
  3. dp[i][j][h][]+=(dp[i-][j][((h-a[i][j])%k + k )%k][]) // 小A取,
  4. dp[i][j][h][]+=(dp[i][j-][((h-a[i][j])%k + k )%k][])
  5. 初始化:dp[i][j][a[i][j]][]=; // 一开始小A可以从任意点开始
  1. //#pragma GCC optimize(3)
  2. //#pragma comment(linker, "/STACK:102400000,102400000") //c++
  3. // #pragma GCC diagnostic error "-std=c++11"
  4. // #pragma comment(linker, "/stack:200000000")
  5. // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  6. // #pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3)
  7.  
  8. #include <algorithm>
  9. #include <iterator>
  10. #include <iostream>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <iomanip>
  14. #include <bitset>
  15. #include <cctype>
  16. #include <cstdio>
  17. #include <string>
  18. #include <vector>
  19. #include <stack>
  20. #include <cmath>
  21. #include <queue>
  22. #include <list>
  23. #include <map>
  24. #include <set>
  25. #include <cassert>
  26.  
  27. using namespace std;
  28. #define lson (l , mid , rt << 1)
  29. #define rson (mid + 1 , r , rt << 1 | 1)
  30. #define debug(x) cerr << #x << " = " << x << "\n";
  31. #define pb push_back
  32. #define pq priority_queue
  33.  
  34. typedef long long ll;
  35. typedef unsigned long long ull;
  36. //typedef __int128 bll;
  37. typedef pair<ll ,ll > pll;
  38. typedef pair<int ,int > pii;
  39. typedef pair<int,pii> p3;
  40.  
  41. //priority_queue<int> q;//这是一个大根堆q
  42. //priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
  43. #define fi first
  44. #define se second
  45. //#define endl '\n'
  46.  
  47. #define OKC ios::sync_with_stdio(false);cin.tie(0)
  48. #define FT(A,B,C) for(int A=B;A <= C;++A) //用来压行
  49. #define REP(i , j , k) for(int i = j ; i < k ; ++i)
  50. #define max3(a,b,c) max(max(a,b), c);
  51. //priority_queue<int ,vector<int>, greater<int> >que;
  52.  
  53. const ll mos = 0x7FFFFFFF; //
  54. const ll nmos = 0x80000000; //-2147483648
  55. const int inf = 0x3f3f3f3f;
  56. const ll inff = 0x3f3f3f3f3f3f3f3f; //
  57. const int mod = 1e9+;
  58. const double esp = 1e-;
  59. const double PI=acos(-1.0);
  60. const double PHI=0.61803399; //黄金分割点
  61. const double tPHI=0.38196601;
  62.  
  63. template<typename T>
  64. inline T read(T&x){
  65. x=;int f=;char ch=getchar();
  66. while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
  67. while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
  68. return x=f?-x:x;
  69. }
  70.  
  71. /*-----------------------showtime----------------------*/
  72. const int maxn = ;
  73. int dp[maxn][maxn][][],mp[maxn][maxn];
  74. int n,m,k;
  75. int main(){
  76. scanf("%d%d%d", &n, &m, &k);
  77. k++;
  78. for(int i=; i<=n; i++){
  79. for(int j=; j<=m; j++){
  80. scanf("%d", &mp[i][j]);
  81. dp[i][j][ mp[i][j]%k ][] = ;
  82. }
  83. }
  84. int ans = ;
  85. for(int i=; i<=n; i++){
  86. for(int j=; j<=m; j++){
  87. // cout<<dp[i][j][mp[i][j]%k][0]<<endl;
  88. for(int p = ; p <k; p++){
  89. if(i > ) dp[i][j][p][] = (dp[i][j][p][] + dp[i-][j][ ((p + mp[i][j])% k + k)%k][])%mod;
  90. if(j > ) dp[i][j][p][] = (dp[i][j][p][] + dp[i][j-][ ((p + mp[i][j])% k + k)%k][])%mod;
  91. if(i > ) dp[i][j][p][] = (dp[i][j][p][] + dp[i-][j][ ((p - mp[i][j])% k + k)%k][])%mod;
  92. if(j > ) dp[i][j][p][] = (dp[i][j][p][] + dp[i][j-][ ((p - mp[i][j])% k + k)%k][])%mod;
  93. }
  94.  
  95. ans = (ans + dp[i][j][][] )% mod;
  96. }
  97. }
  98. printf("%d\n", ans);
  99. return ;
  100. }

P1373

luogu- P1373 小a和uim之大逃离 DP 四维,其中一维记录差值的更多相关文章

  1. 【luogu P1373 小a和uim之大逃离】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1373 想不出来状态 看了一眼题解状态明白了 dp[i][j][h][1/0] 表示在i,j点差值为h是小A还 ...

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

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

  3. Luogu P1373 小a和uim之大逃离【dp】By cellur925

    题目传送门 $50pts$:容易设计出状态$f[i][j][l][r][st]$表示当前的这个人在($i$,$j$),小a和uim魔瓶中的含量分别为$l$,$r$,当$st=0$表明现在是小a在吃,当 ...

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

    正解:dp 解题报告: 传送门! 同样是看到列表发的题解就想着跟着做下dp的题目趴 然后发现还挺难的,,,反正我只大概想到怎么转移但是初始化什么的都不会TT 所以还是大概说下QAQ 首先可以想到设f[ ...

  5. [P1373]小a和uim之大逃离 (DP)

    [题目链接] 模拟赛的时候的一道题 因为老师不小心把数据发下来了……我考试打表的 考完之后Orz xzjds 然后开始打正解 题意 大概就是两个人,走矩阵,两个人各加上走上的矩阵的数值,要求最终两个人 ...

  6. luogu 1373 小a和uim之大逃离 dp

    有取模操作,所以直接维护模意义下的差即可. Code: #include <bits/stdc++.h> #define M 16 #define N 801 #define ll lon ...

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

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

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

    2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...

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

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

随机推荐

  1. T-SQL 镜像测试

    --====================================================== ----镜像计划建立 2016-05-10 17:05:16.463 hubiyun ...

  2. Web安全之CSRF攻击(转载)

    CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...

  3. 【iOS】NSLog 打印 BOOL 类型值

    这个问题以前没在意,刚偶然打印,发现有些问题,上网查了下,发现是这么搞的: NSLog(@"%@", isEqual?@"YES":@"NO" ...

  4. 【iOS】“找不到使用指定主机名的服务器”

    今天用 Application Loader 提交 APP 的时,遇到了这个奇葩的问题,如下图: 后来换个网络解决了……我也不知道什么原因,就这么奇葩的弄好了……

  5. MyBatis 核心配置综述之StatementHandler

    目录 MyBatis 核心配置综述之StatementHandler MyBatis 四大组件之StatementHandler StatementHandler 的基本构成 StatementHan ...

  6. 从无到满意offer,你需要知道的那些事

    本文首发于微信公众号:[坂本先生] 原文地址:从无到满意offer,你需要知道的那些事 1.求职软件/网站汇总 软件 评价 推荐指数 拉钩网 手机端产品设计的比较好,当时在上面找到了很多的面试机会 5 ...

  7. AppBoxFuture: 123挨个站-数据按序存储

      最近几天在优化存储的编码规则,顺带把之前设计了但未实现的倒排序一并实现了.由于所有数据(元数据.实体.索引等)都映射至RocksDB的Key-Value存储,所以必须扩展RocksDB的自定义比较 ...

  8. Web项目如何做单元测试

    你可能会用单元测试框架,python的unittest.pytest,Java的Junit.testNG等. 那么你会做单元测试么!当然了,这有什么难的? test_demo.py def inc(x ...

  9. Python学习系列(三)Python 入门语法规则1

    一.注释 ''' 多行注释 ''' #单行注释 '''    #example1.1 测试程序  时间:4/17/2017 i1=input("请输入用户名:") i2=input ...

  10. 10.Go-goroutine,waitgroup,互斥锁和channel

    10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...