luogu类似题很多的。

P1006 传纸条

有不少做法。这里提一个三维做法。

找两条路,可以模拟为有两个人同从(1,1)走到(m,n),走不同的路。

设有k步,则显然2<=k<m+n (为什么?初始两步,两个人都走上1,1的位置;不多于m+n……)

因此,f[k][i][j]表示为一个走到第i行,一个走到第j列,总步数k(知道为啥不多于m+n了吧??)

至于当前位置是由哪个位置来的,显然了好吧。

看着方程就秒懂了:

ans=max(f[k][i][j],max(max(f[k-][i][j],f[k-][i-][j]),max(f[k-][i-][j-],f[k-][i][j-])));

对没错恶意压行。。

可能这样大家看的清楚:

但是这不全是状态转移方程!!!只是暂时记下一个ans罢了,等号后面是状态转移方程的一部分呢。

    if(ans!=-)f[k][i][j]=ans+a[k-i][i]+a[k-j][j];

如果ans有值,我再进行赋值,f[k][i][j]为走到当前的最大值 加上 当前位置能得到的两个值。

所以要重置f数组为:-1

    初始化f数组:f[2][1][1]=0

最后输出的为:f[m+n-1][n-1][n] (右下角不会走到,所以是n-1;另外 右下角的左边和上面其实是一样的。输出一种。)

 #include <iostream>
#include <cstring>
using namespace std;
int a[][],f[*][][];
int main(){
int m,n,ans; cin>>m>>n;
memset(f,-,sizeof(f)), f[][][]=;
for(int i=;i<=m;i++)for(int j=;j<=n;j++)cin>>a[i][j];
for(int k=;k<m+n;k++)for(int i=;i<n;i++)for(int j=i+;j<=n;j++){
ans=max(f[k][i][j],max(max(f[k-][i][j],f[k-][i-][j]),max(f[k-][i-][j-],f[k-][i][j-])));
if(ans!=-)f[k][i][j]=ans+a[k-i][i]+a[k-j][j];
}
cout<<f[m+n-][n-][n];
}

二维做法:

  观察上述做法 我们发现 第一维没有用啊?所以去掉就好了。当然 循环是一样的三层。

  意义不大,节省空间,并未快。

dp-棋盘形dp的更多相关文章

  1. Contest 高数题 樹的點分治 樹形DP

    高数题 HJA最近在刷高数题,他遇到了这样一道高数题.这道高数题里面有一棵N个点的树,树上每个点有点权,每条边有颜色.一条路径的权值是这条路径上所有点的点权和,一条合法的路径需要满足该路径上任意相邻的 ...

  2. 算法技巧讲解》关于对于递推形DP的前缀和优化

    这是在2016在长沙集训的第三天,一位学长讲解了“前缀和优化”这一技巧,并且他这一方法用的很6,个人觉得很有学习的必要. 这一技巧能使线性递推形DP的速度有着飞跃性的提升,从O(N2)优化到O(N)也 ...

  3. C. The Fair Nut and String 递推分段形dp

    C. The Fair Nut and String 递推分段形dp 题意 给出一个字符串选择一个序列\({p_1,p_2...p_k}\)使得 对于任意一个\(p_i\) , \(s[p_i]==a ...

  4. BZOJ1017魔兽地图DotR 樹形DP

    @(BZOJ)[樹形DP, 三維DP] Description DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA ...

  5. 棋盘问题(dp)

    棋盘问题 传送门 题目描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个 ...

  6. P1436 棋盘分割[dp]

    题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘.(每次 ...

  7. bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]

    Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...

  8. T2980 LR棋盘【Dp+空间/时间优化】

    Online Judge:未知 Label:Dp+滚动+前缀和优化 题目描述 有一个长度为1*n的棋盘,有一些棋子在上面,标记为L和R. 每次操作可以把标记为L的棋子,向左移动一格,把标记为R的棋子, ...

  9. UVA1218--树形DP

    没有看书和题解做的一道树形DP题,思路很清晰..只是debug上花了很久的时间才发现看错了条件..并不是每个点都只能和一台服务器相邻,而是非服务器的点只能和一台服务器相邻..看错了一个条件差距大了去了 ...

  10. UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题

    本文出自:http://blog.csdn.net/dr5459 题目地址: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&a ...

随机推荐

  1. 第一册:lesson 121.

    原文:The man in a hat. question:Why didn't Caroline  recognize the customer straight away? I bought tw ...

  2. phpstorm本地怎么上传到服务器

    连接服务器 菜单栏找到[工具/Tools]->[Deployment/部署]->[Confinguration…/配置…]. 点加号(+),添加一台服务器,填写名称,选择类型为SFTP,点 ...

  3. Python 标准类库 - 因特网协议与支持之socketserver

    标准类库 - 因特网协议与支持之socketserver by:授客 QQ:1033553122 socketserver 模块,简化网络服务编写任务. 创建服务的步骤 1  通过子类化BaseReq ...

  4. springmvc流程图

  5. What is “Neural Network”

    Modern neuroscientists often discuss the brain as a type of computer. Neural networks aim to do the ...

  6. 返回表对象的方法之一--bulk collect into

    1.创建表对象的类型(oracle Types类目录下) create or replace type obj_table1 as object( xzq nvarchar2(19), mj numb ...

  7. liteos简介(一)

    LiteOS是在2015华为网络大会上华为发布的敏捷网络3.0中的一个轻量级的物联网操作系统,LiteOS体积只有10KB级. 在Hi3559A中,liteos是用于Cortex-A53,用于处理MP ...

  8. CTF杂项之BubbleBabble加密算法

    这题很坑,刚开始我拿到就分析不出来了(/无奈),关键是不知道是什么加密算法,后来看题目描述的bubble,猜测是bubble 这种算法(听都没听说过...) 上图 这串编码 xinik-samak-l ...

  9. 自己实现一个nullptr

    一 具体实现 代码(c++) const class nullptr_t { public: template<class T> inline operator T*() const { ...

  10. mac上修改host

    host文件下载地址: https://github.com/highsea/Hosts/blob/master/hosts https://github.com/racaljk/hosts 备份ma ...