双程动态规划 nyoj61
题目大意:
在矩阵m*n中,从(1,1)点到(m,n)点,再从(m,n)点到(1,1)点,所走路线经过的同学最大好心值, 要求每个点只能走一遍。
分析:
①我们可以把它只看成两个人同时从(1,1)点, 走到(m,n)点。
②因为只可以往两个方向走所以无论什么了路线,从(1,1)到(m,n)所走的步数一定相同。开四维数组存状态的话f[x1][y1][x2][y2]](表示当前一个人走在(x1,y1)一人走在(x2,y2))那么意思也就是x1+y1 = x2+y2。
③此题中开四维数组太大,会超时。又知道同一时间所走的步数相同。那么我们可以设一个三维数组f[i][x1][x2]: i代表第i步(或者i时刻),第一个人在x1行,第二个人在x2行时,所经过的同学最大好心值。 细心地应该发现:一共走的步数已知,向下走的步数(也就是x1, x2)已知,那么向右走的步数也能知道啦 y1= i - x1; y2 = i - x2; 其实f[i][x1][x2]已经暗示了两个人所在的位置(x1, i-x1),(x2, i-x2),所代表的和四维数组f[x1][y1][x2][y2]一样。
额。。。说了这么多,不知明白没有。好了来代码吧! 还要注意的是:我的数组是从(1,1)开始的。 如果从(0,0)开始只要稍微改一下边界就行。
#include<iostream> #include<cstdio> #include<string.h> #include<math.h> using namespace std;int t, m, n, a[100][100], f[150][100][100]; int max1(int a, int b, int c, int d) {a = max(a, b);c = max(c, d);a = max(a, c);return a; } void dp() {for(int i = 3; i < m+n; i++){for(int x1 = 1; x1 <= n && x1 <= i-1; x1++){for(int x2 = 1; x2 < n && x2 < i-1; x2++){int y1 = i - x1;int y2 = i - x2;if(y1 == y2) continue;//如果y1, y2不同那么x1,x2一定也不同。那么两个人就不会走相同的点了f[i][x1][x2] = max1(f[i-1][x1][x2], f[i-1][x1][x2-1], f[i-1][x1-1][x2],f[i-1][x1-1][x2-1])+a[x1][y1]+a[x2][y2];}}} } int main() {cin >> t;while(t--){memset(a, 0, sizeof(a));scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)scanf("%d", &a[i][j]);memset(f, 0, sizeof(f));dp();printf("%d\n", f[m+n-1][n][n-1]);}return 0; }
View Code
转载于:https://www.cnblogs.com/wd-one/p/4454563.html
双程动态规划 nyoj61相关推荐
- NYOJ-712(动态规划)-题目----------------------------- 探寻宝藏
/*探寻宝藏时间限制:1000 ms | 内存限制:65535 KB描述传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有宝物,最珍贵的宝物 ...
- NYOJ-61 传纸条 双线动态
传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...
- 伍六七带你学算法 动态规划 ——不同路径
力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格 ...
- 由动态规划计算编辑距离引发的思考
简单介绍 编辑距离算法: https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the- ...
- LeetCode 10. Regular Expression Matching python特性、动态规划、递归
前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...
- 【动态规划】Part1
1. 硬币找零 题目描述:假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. 分析: dp [0] = 0 dp [1] = 1 + ...
- 2016.4.2 动态规划练习--讲课整理
1.codevs1742 爬楼梯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小明家外面有一个长长的楼梯,共N阶.小明的腿 ...
- 算法设计与分析第4章 动态规划(二)【DP序列问题】
第3章 动态规划(二)[DP序列问题] 3.2 DP序列问题 (51nod的动态规划教程很不错,讲解很详细,以下分析来自51nod) 1.矩阵取数问题 给定一个m行n列的矩阵,矩阵每个元素是一个正整数 ...
- 算法设计与分析第4章 动态规划(一)【背包问题】
第3章动态规划(一)[背包问题] 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常只有多项式量级.在用 ...
最新文章
- 【Qt】Qt再学习(一):Application Example
- MySQL外键约束On Delete、On Update各取值的含义
- document,element,node方法
- python中字符串运算符及用法_python将字符串转换为运算符
- 【Hibernate】HibernateCallback总结
- 怎样切换git账号密码错误_git中多账号切换问题的解决方案(转)
- adb remount overlayfs的说明
- swift 静态库、动态库
- 测试电动车速度的软件,应用测试:最高速度达11MB/S
- 程序崩溃优雅退出之-SetUnhandledExceptionFilter
- 测试ai模糊软件,“马赛克视频”AI还原软件被疯传!测试效果出乎意料!
- 一文简单了解粒子群算法(PSO)
- 程序设计大赛WBS图
- 【NOIP 2011】 观光公交
- 操作系统--04文件管理
- 让树莓派变身照相机——摄像头控制
- LOESS与LOWESS
- 随机点名器1(Java数组基础)
- java生成8位的uuid_分布式系统全局唯一ID简介、特点、生成
- 济南申报高企需要什么材料