题目大意:

在矩阵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相关推荐

  1. NYOJ-712(动态规划)-题目----------------------------- 探寻宝藏

    /*探寻宝藏时间限制:1000 ms | 内存限制:65535 KB描述传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有宝物,最珍贵的宝物 ...

  2. NYOJ-61 传纸条 双线动态

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...

  3. 伍六七带你学算法 动态规划 ——不同路径

    力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格 ...

  4. 由动态规划计算编辑距离引发的思考

    简单介绍 编辑距离算法: https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the- ...

  5. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  6. 【动态规划】Part1

    1. 硬币找零 题目描述:假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. 分析:   dp [0] = 0            dp [1] = 1 + ...

  7. 2016.4.2 动态规划练习--讲课整理

    1.codevs1742 爬楼梯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 小明家外面有一个长长的楼梯,共N阶.小明的腿 ...

  8. 算法设计与分析第4章 动态规划(二)【DP序列问题】

    第3章 动态规划(二)[DP序列问题] 3.2 DP序列问题 (51nod的动态规划教程很不错,讲解很详细,以下分析来自51nod) 1.矩阵取数问题 给定一个m行n列的矩阵,矩阵每个元素是一个正整数 ...

  9. 算法设计与分析第4章 动态规划(一)【背包问题】

    第3章动态规划(一)[背包问题] 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常只有多项式量级.在用 ...

最新文章

  1. 【Qt】Qt再学习(一):Application Example
  2. MySQL外键约束On Delete、On Update各取值的含义
  3. document,element,node方法
  4. python中字符串运算符及用法_python将字符串转换为运算符
  5. 【Hibernate】HibernateCallback总结
  6. 怎样切换git账号密码错误_git中多账号切换问题的解决方案(转)
  7. adb remount overlayfs的说明
  8. swift 静态库、动态库
  9. 测试电动车速度的软件,应用测试:最高速度达11MB/S
  10. 程序崩溃优雅退出之-SetUnhandledExceptionFilter
  11. 测试ai模糊软件,“马赛克视频”AI还原软件被疯传!测试效果出乎意料!
  12. 一文简单了解粒子群算法(PSO)
  13. 程序设计大赛WBS图
  14. 【NOIP 2011】 观光公交
  15. 操作系统--04文件管理
  16. 让树莓派变身照相机——摄像头控制
  17. LOESS与LOWESS
  18. 随机点名器1(Java数组基础)
  19. java生成8位的uuid_分布式系统全局唯一ID简介、特点、生成
  20. 济南申报高企需要什么材料

热门文章

  1. jsoho.com介绍
  2. 解决RecyclerView在ScrollView中会置顶它上面的控件
  3. 如何避开项目管理陷阱?
  4. php 自动发送邮件的实现
  5. java,使用get、post请求url地址
  6. JavaScript改变 HTML 内容
  7. Windows 7键盘失灵导致无法输入登录密码问题解决方案
  8. JAV A获取项目路径
  9. Android开发学习笔记(二)——编译和运行原理(1)
  10. 如何根据值查找所在的表和字段