博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 1373 小a和uim之大逃离
阅读量:6214 次
发布时间:2019-06-21

本文共 1835 字,大约阅读时间需要 6 分钟。

这是一道dp好题

咱们读读题

 

题意就是求到达某一点使得两人获取的能量一样

本蒟蒻一开始想了半天都没能把两者能量一样转换成两者差为0

若能这么转换,dp方程就能得出来了

dp[i][j][h][1]=(dp[i][j][h][1]+dp[i-1][j][(h+d[i][j])%k][0])%mod;

dp[i][j][h][1]=(dp[i][j][h][1]+dp[i][j-1][(h+d[i][j])%k][0])%mod;

dp[i][j][h][0]=(dp[i][j][h][0]+dp[i-1][j][(h-d[i][j]+k)%k][1])%mod;

dp[i][j][h][0]=(dp[i][j][h][0]+dp[i][j-1][(h-d[i][j]+k)%k][1])%mod;

i,j表示到达的位置坐标为 i,j

h表示两者获得的能量之差(小a-uim)

0表示当前走的人是小a,1表示当前走的人是uim

状态转移就如上

当前是1时,就是由上一个点的差值加上这个点的值

当前是0时,就是由上一个点的差值在减去这个点的值

不要忘记%k

先看看代码,后面会讲解坑点

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;const int mod=1000000007;const int N=805;int dp[N][N][20][2],d[N][N],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",&d[i][j]); dp[i][j][d[i][j]%k][0]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { for(int h=0;h<=k;h++) { dp[i][j][h][1]=(dp[i][j][h][1]+dp[i-1][j][(h+d[i][j])%k][0])%mod; dp[i][j][h][1]=(dp[i][j][h][1]+dp[i][j-1][(h+d[i][j])%k][0])%mod; dp[i][j][h][0]=(dp[i][j][h][0]+dp[i-1][j][(h-d[i][j]+k)%k][1])%mod; dp[i][j][h][0]=(dp[i][j][h][0]+dp[i][j-1][(h-d[i][j]+k)%k][1])%mod; } } int 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("%d\n",ans);}

注意:

1.一开始的初始化,应该把小a放在每个点所获得的能量值都求出来

2.%运算是有优先级的

  上述式子就不能写成dp[i][j][h][1]+=dp[i-1][j][(h+d[i][j])%k][0]%mod,因为这是先给后面取模,在进行加法运算,

  这里坑了我很久

3.因为减法会产生负数,所以要加上k在取模

4.这题还卡空间,如果定成long long 就会爆掉

5.别忘记k++,看清楚题

差不多都讲完了,希望对你们有帮助

转载于:https://www.cnblogs.com/wzrdl/p/9785996.html

你可能感兴趣的文章
烂泥:ubuntu下配置msmtp+mutt发送邮件
查看>>
CDQ分治 陌上花开(三维偏序)
查看>>
ios开发之--打印bool值
查看>>
打表找规律猜想是一种很好用的刷题技巧,写短码有用
查看>>
C# 加密术
查看>>
Java对象初始化详解
查看>>
Vue.js基础语法(二)组件
查看>>
常用的用户界面样式
查看>>
[转]MPI--MPI+VS2010 配置及编译
查看>>
L171
查看>>
nodeJS之HTTP
查看>>
poj2748
查看>>
poj2546
查看>>
windows运维如何批量远程桌面
查看>>
DB2 数据库的安装配置及监控
查看>>
IIS应用程序扩展名映射中无法添加“.svc”的问题
查看>>
ssd存储的SLC、MLC、TLC闪存芯片颗粒有什么区别?
查看>>
「小程序JAVA实战」小程序的flex布局(22)
查看>>
maven项目没有错,但是在项目头上有红叉的解决方法
查看>>
Hibernate注解与JPA
查看>>