【动态规划专题】数字三角形模型
题目 | 算法 |
---|---|
AcWing 1015. 摘花生 | 简单线性DP、数字三角形模型 |
AcWing 1018. 最低通行费 | 数字三角形模型 |
AcWing 1027. 方格取数 | 四维DP |
AcWing 275. 传纸条 | 四维DP |
闫氏DP分析法
从集合的角度思考DP问题
从最基础的例题开始分析
A、AcWing 1015. 摘花生
例题分析:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>using namespace std;const int N = 507, M = 500007, INF = 0x3f3f3f3f;int n,m,T;
int w[N][N];
int f[N][N];int main(){scanf("%d",&T);while(T -- ){memset(f,0,sizeof f);scanf("%d%d",&n,&m);for(int i = 1;i <= n;++i)for(int j = 1;j <= m;++j)scanf("%d",&w[i][j]);for(int i = 1;i <= n;++i)for(int j = 1;j <= m;++j)f[i][j] = max(f[i - 1][j],f[i][j - 1]) + w[i][j];// f[j] = max(f[j], f[j-1]) + a[i][j];cout<<f[n][m]<<endl;}return 0;
}
B、AcWing 1018. 最低通行费
因为是一个N* N的方格图,如果我们一直向右走然后再一直向下走,不走回头路地走到终点,我们就需要2(n−1)2(n - 1)2(n−1)的时间,所以本题和上一道摘花生是一道模板题。但是这里我们求的是最小值,所以我们在状态转移之前要把f数组初始化为INF。
还有需要注意的是由于求最小值取min,而第一行和第一列是不能从上一行和上一列转移过来的,但是上一行和上一列的f数组是0,会影响答案,所以需要特判一下。
#include<cstdio>
#include<algorithm>
#include<cstring>using namespace std;const int N = 110, INF = 0x3f3f3f3f;int n;
int w[N][N];
int f[N][N];int main(){scanf("%d",&n);for(int i = 1;i <= n;++i)for(int j = 1;j <= n;++j){scanf("%d",&w[i][j]);}for(int i = 1;i <= n;++i)for(int j = 1;j <= n;++j){if(i == 1 && j == 1)f[i][j] = w[i][j];else {f[i][j] = INF;if(i > 1)f[i][j] = min(f[i][j],f[i - 1][j] + w[i][j]);if(j > 1)f[i][j] = min(f[i][j],f[i][j - 1] + w[i][j]);}}printf("%d\n",f[n][n]);return 0;
}
C、AcWing 1027. 方格取数
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N = 50, INF = 0x3f3f3f3f;
int n;
int e[N][N];
int f[N][N][N][N];int main(){int x,y,z;scanf("%d",&n);while(scanf("%d%d%d",&x,&y,&z) != EOF){e[x][y] = z;}for(int i = 1;i <= n;++i)for(int j = 1;j <= n;++j)for(int k = 1;k <= n;++k)for(int l = 1;l <= n;++l){f[i][j][k][l] = max(max(f[i - 1][j][k - 1][l],f[i][j - 1][k][l - 1]),max(f[i - 1][j][k][l - 1],f[i][j - 1][k - 1][l]));f[i][j][k][l] += e[i][j] + e[k][l];if(i == k && j == l)f[i][j][k][l] -= e[i][j];}cout<<f[n][n][n][n]<<endl;return 0;
}
D、AcWing 275. 传纸条
可以直接用上一题的代码( ̄▽ ̄)"
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;const int N = 51, INF = 0x3f3f3f3f;
int n,m;
int e[N][N];
int f[N][N][N][N];int main(){int x,y,z;scanf("%d%d",&n,&m);for(int i = 1;i <= n;++i)for(int j = 1;j <= m;++j){scanf("%d",&e[i][j]);}for(int i = 1;i <= n;++i)for(int j = 1;j <= m;++j)for(int k = 1;k <= n;++k)for(int l = 1;l <= m;++l){f[i][j][k][l] = max(max(f[i - 1][j][k - 1][l],f[i][j - 1][k][l - 1]),max(f[i - 1][j][k][l - 1],f[i][j - 1][k - 1][l]));f[i][j][k][l] += e[i][j] + e[k][l];if(i == k && j == l)f[i][j][k][l] -= e[i][j];}cout<<f[n][m][n][m]<<endl;return 0;
}
【动态规划专题】数字三角形模型相关推荐
- 动态规划之数字三角形模型
数字三角形模型 前言 最低通行费 方格取数 传纸条 前言 数字三角形题型的一般描述是: 给定一个共有N行的三角矩阵A,其中第t行有X列.从左上角出发,每次可以向下方或右下方走一步,最终到达底部求把经过 ...
- [AcWing] 1018. 最低通行费(C++实现)数字三角形模型
[AcWing] 1018. 最低通行费(C++实现)数字三角形模型 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 ...
- 最长子序列和 动态规划python_算法基础之python实现动态规划中数字三角形和最长上升子序列问题...
数字三角形问题:python 问题描述:函数 问题分析:spa 程序代码:(递归法和动归法)code # -*- coding: utf-8 -*- """ Create ...
- 动态规划初步--数字三角形
数字三角形是一个由非负数组成的三角形,第n行有n个数,形如: 1 2 3 4 5 6 除最下行之外,每一行的左下和右下各有一个数,从第一行开始,向下,左或者右走一格,直到走到最后一行,所经过的路径上 ...
- 【动态规划】数字三角形2
[题目描述] 数字三角形 要求走到最后mod 100最大 [输入格式] 第1行n,表示n行 <=25 第2到n+1行为每个的权值 [输出格式] mod 100最大值 [分析] 设置状态f[i][ ...
- 动态规划_数字三角形
问题描述:在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大,路径上的每一步都只能往左下或右下走.只需要求出这个最大和即可,不必给出具体路径. 输入数据的要求:三角形的行数 ...
- 动态规划之数字三角形问题
问题描述 在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或者右下走.只需要求出这个最大和即可.不必给出具体路径. 三角形的行数大于1小于等于100 ...
- 【动态规划】数字三角形c语言
本学期的的算法实践课的实验作业.写的不好请大家多多指教. [题目] 试设计一个算法,计算出从三角形的顶到底的一条路径,使该路径经过的数字总和最大. 数据输入: 由文件input.txt提供输入数据.文 ...
- C++---数字三角形模型---最低通行费(每日一道算法2023.1.14)
注意事项: 本题为线性dp-数字三角形的扩展题. 题目: 一个商人穿过一个 N×N 的正方形的网格,去参加一个非常重要的商务活动. 他要从网格的左上角进,右下角出. 每穿越中间 1 个小方格,都要花费 ...
最新文章
- 什么是深度智能:2021年深度智能的发展趋势
- PHP 高级编程之多线程
- 华为S5500T 存储巡检
- stm32中使用#pragma pack(非常有用的字节对齐用法说明)
- gva explaination
- ActiveMQ简介与安装
- MongoDB Project Fields
- C++并发编程之std::future
- Python str 与 bytes 类型(Python2/3 对 str 的处理)
- 计算机信息中心的安全生产责任,信息中心安全生产责任制 (刘.doc
- python3读取pdf文档;pdfminer3k
- win2008Server 部署网站
- 第三部分:成交动力学之十大成交激素——9、紧迫感
- 开源RapidScada插件开发---短信报警插件
- ios android 跨平台工具,15个很优秀的跨平台的移动开发工具
- 自制月球灯第一期之无线充电篇
- 基于51单片机的温湿度检测及调节系统
- 微信营销的技巧有哪些 微信营销取名的禁忌 微信内容写作的七个要点
- mysql创建单表只读访问用户及过程问题处理:如mysql: command not found ///GRANT command denied to user
- label设置自动换行的方法
热门文章
- Python 为什么用 # 号作注释符?
- 机器学习模型调参指南(附代码)
- 如何从0-1构建自己的”pytorch“(自己专属的深度学习框架)——part02
- 架构师升级之路,你掌握了吗?
- Java报表工具FineReport导出EXCEL的四种API
- 一年两次新产品发布,APICloud上线App定制服务平台
- FBI很气愤:黑了CIA的熊孩子又回来了
- javascript的typeof返回哪些数据类型
- RedHat9.0下载地址
- Java性能调优、LinkedIn容器部署、阿里移动性能调优——首届APMCon精彩演讲先睹为快...