这是迷宫类dp我自己取的名字,通常比较简单,上货

简单模型

数字三角形

状态表示:f[i][j]表示起点第\(i\)行第\(j\)个数最短路径的长度

状态转移:\(f[i][j] = max(f[i + 1][j], f[i + 1][j + 1]) + g[i][j]\) 即从左下点和右下点分别转移

代码

#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; const int N = 1010;
typedef long long LL; int f[N][N]; int main()
{
int r;
cin >> r;
for(int i = 1; i <= r; i++)
for(int j = 1; j <= i; j++)
cin >> f[i][j]; for(int i = r; i >= 1; i --)
for(int j = 1; j <= i; j++)
f[i][j] = max(f[i + 1][j], f[i + 1][j + 1]) + f[i][j]; cout << f[1][1]; return 0;
}

基本模型

摘花生

状态表示:f[i][j]表示从起点走到(i, j)的最短路径的长度

状态转移:\(f[i][j] = max(f[i - 1][j] + g[i][j], f[i][j - 1] + g[i][j])\)

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3f using namespace std; const int N = 110;
typedef long long LL; int f[N][N]; int main()
{
int T;
cin >> T;
while(T--)
{
int r, c;
cin >> r >> c;
for(int i = 1; i <= r; i ++)
for(int j= 1; j <= c; j ++)
cin >> f[i][j]; for(int i = 1; i <= r; i ++)
for(int j= 1; j <= c; j ++)
f[i][j] = max(f[i - 1][j] + f[i][j], f[i][j - 1] + f[i][j]); cout << f[r][c] << endl;
} return 0;
}

两次路径模型

方格取数

状态表示:f[i][j][k][p]表示第一个人走到(i,j),第二个人走到(k,l)的最优解

状态转移:$ f[i][j][k][l]=max(f[i-1][j][k-1][l],f[i-1][j][k][l-1],f[i][j-1][k-1][l],f[i][j-1][k][l-1]);$

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#define INF 0x3f3f3f3f using namespace std; const int N = 11;
typedef long long LL; int g[N][N], f[N][N][N][N]; int main()
{
int n;
cin >> n;
int x, y;
while(cin >> x >> y >> g[x][y], x)
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
for(int k = 1; k <= n; k++)
{
for(int p = 1; p <= n; p++)
{
f[i][j][k][p] = max(f[i - 1][j][k - 1][p], f[i][j - 1][k - 1][p]);
f[i][j][k][p] = max(f[i][j][k][p], max(f[i - 1][j][k][p - 1], f[i][j - 1][k][p - 1]));
if(i == k && j == p)
{
f[i][j][k][p] += g[i][j];
}
else f[i][j][k][p] += g[i][j] + g[k][p];
}
} }
} cout << f[n][n][n][n] << endl;
return 0;
}

题面

(防止OJ炸(虽然不太可能

数字三角形 Number Triangles

题目描述

观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

在上面的样例中,从 \(7 \to 3 \to 8 \to 7 \to 5\) 的路径产生了最大

输入格式

第一个行一个正整数 \(r\) ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

输出格式

单独的一行,包含那个可能得到的最大的和。

提示

【数据范围】

对于 \(100\%\) 的数据,\(1\le r \le 1000\),所有输入在 \([0,100]\) 范围内。

摘花生

题目描述

Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。

输入

第一行是一个整数\(T\),代表一共有多少组数据。\((1≤T≤100)\)

接下来是T组数据。

每组数据的第一行是两个整数,分别代表花生苗的行数\(R\)和列数 \(C(1≤R,C≤100)\)

每组数据的接下来\(R\)行数据,从北向南依次描述每行花生苗的情况。每行数据有\(C\)个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目\(M(0≤M≤1000)\)。

输出

对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。

方格取数

[NOIP2000 提高组]

题目描述

设有 \(N \times N\) 的方格图 \((N \le 9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 \(0\)。如下图所示(见样例):

A
0 0 0 0 0 0 0 0
0 0 13 0 0 6 0 0
0 0 0 0 7 0 0 0
0 0 0 14 0 0 0 0
0 21 0 0 0 4 0 0
0 0 15 0 0 0 0 0
0 14 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B

某人从图的左上角的 \(A\) 点出发,可以向下行走,也可以向右走,直到到达右下角的 \(B\) 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 \(0\))。

此人从 \(A\) 点到 \(B\) 点共走两次,试找出 \(2\) 条这样的路径,使得取得的数之和为最大。

输入格式

输入的第一行为一个整数 \(N\)(表示 \(N \times N\) 的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的 \(0\) 表示输入结束。

输出格式

只需输出一个整数,表示 \(2\) 条路径上取得的最大的和。

迷宫类dp整合的更多相关文章

  1. 动态规划——区间DP,计数类DP,数位统计DP

    本博客部分内容参考:<算法竞赛进阶指南> 一.区间DP 划重点: 以前所学过的线性DP一般从初始状态开始,沿着阶段的扩张向某个方向递推,直至计算出目标状态. 区间DP也属于线性DP的一种, ...

  2. SDOI2010代码拍卖会 (计数类DP)

    P2481 SDOI2010代码拍卖会 $ solution: $ 这道题调了好久好久,久到都要放弃了.洛谷的第五个点是真的强,简简单单一个1,调了快4个小时! 这道题第一眼怎么都是数位DP,奈何数据 ...

  3. CH5E26 扑克牌 (计数类DP)

    $ CH~5E26~\times ~ $ 扑克牌: (计数类DP) $ solution: $ 唉,计数类DP总是这么有套路,就是想不到. 这道题我们首先可以发现牌的花色没有价值,只需要知道每种牌有 ...

  4. $Poj1737\ Connected\ Graph$ 计数类$DP$

    AcWing Description 求$N$个节点的无向连通图有多少个,节点有标号,编号为$1~N$. $1<=N<=50$ Sol 在计数类$DP$中,通常要把一个问题划分成若干个子问 ...

  5. $CF559C\ Gerald\ and\ Fiant\ Chess$ 计数类$DP$

    AcWing Description 有个$H$行$W$列的棋盘,里面有$N$个黑色格子,求一个棋子由左上方格子走到右下方格子且不经过黑色格子的方案数. $1<=H,M<=1e5,1< ...

  6. 查看权限详情 将部门大类单据整合,将子类单据id去重合并

    /** * 查看权限详情 * @param id 部门id * @return */ @GetMapping("getListInfo") public R getDetail(S ...

  7. UVA 10531 Maze Statistics 迷宫统计 迷宫插头DP 四联通 概率

    题意: 有一个N*M的图,每个格子有独立概率p变成障碍物.你要从迷宫左上角走到迷宫右下角.求每个格子成为一个有解迷宫中的障碍物的概率.N <= 5,M <= 6 分析: 这真是一道好题,网 ...

  8. 字符串类dp的题目总结

    熟练掌握回文串吧,大致有dp或者模拟类的吧 ①dp+预处理,懂得如何枚举回文串(一) ②dp匹配类型的题目(二) ③dp+预处理 子串类型 (三) ④字符串的组合数(四) 一:划分成回文串 UVA11 ...

  9. 牛牛的DRB迷宫(DP、二进制编码器)

    牛牛的DRB迷宫I 链接:https://ac.nowcoder.com/acm/contest/3004/A来源:牛客网 题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D',' ...

随机推荐

  1. 网络排查工具MTR介绍

    开源Linux 回复"读书",挑选书籍资料~ 常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下有一个更好用的网络连通性判断工具 ...

  2. OpenStack平台镜像优化

    在使用打快照方式制作镜像后,镜像的大小会变得非常大,比如一个基础的CentOS镜像大小为400M左右,但是使用打快照方式制作的镜像大小会有1个G左右,具体的大小还要根据安装的东西来实际情况实际分析. ...

  3. CesiumJS 2022^ 原理[4] - 最复杂的地球皮肤 影像与地形的渲染与下载过程

    目录 API 回顾 1. 对象层级关系 1.1. Scene 中特殊的物体 - Globe 1.2. 地球 Globe 与椭球 Ellipsoid 1.3. 瓦片四叉树 - QuadtreePrimi ...

  4. mysql allow remote host

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEG ...

  5. 129_Power Pivot&Power BI DAX不同维度动态展示&动态坐标轴

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 某天在和那还是叫我大铁吧 交流关于季度&月度同时展示的问题,感概中国式报表真的需求很微妙. 下面来看看到 ...

  6. 【freertos】009-任务控制

    目录 前言 9.1 相对延时 9.1.1 函数原型 9.1.2 函数说明 9.1.3 参考例子 9.2 绝对延时 9.2.1 函数原型 9.2.2 函数说明 9.2.3 参考例子 9.3 获取任务优先 ...

  7. linux-ext4格式文件误删除,该如何恢复?

    在开始进行实验之前,我已经新建了一个空目录/data,并将该目录挂载了一块新硬盘,将硬盘分区格式化为ext4的格式,所以当我操作/data目录下的文件及文件夹的时候,实际上就是针对新挂载的硬盘进行数据 ...

  8. AcWing 1248. 灵能传输 蓝桥杯

    蓝桥杯的一道题:灵能传输 https://www.acwing.com/problem/content/description/1250/ 首先是简化操作,将原数组转化为前缀和数组(下标都是从1开始) ...

  9. 模块re正则

    正则表达式 内容概要 正则表达式前戏 正则表达式之字符组 正则表达式特殊符号 正则表达式量词 正则表达式贪婪与非贪婪匹配 正则表达式取消转义 python内置模块之re模块 内容详情 正则表达式前戏 ...

  10. 开发工具-在线JSON相关的工具

    更新记录: 2022年6月7日 新增链接. 2022年6月1日 开始. https://www.sojson.com/json2entity.html URL参数互转JSON https://tool ...