题目大意:

在矩阵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[][], f[][][];
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 = ; i < m+n; i++)
{
for(int x1 = ; x1 <= n && x1 <= i-; x1++)
{
for(int x2 = ; x2 < n && x2 < i-; x2++)
{
int y1 = i - x1;
int y2 = i - x2;
if(y1 == y2) continue;//如果y1, y2不同那么x1,x2一定也不同。那么两个人就不会走相同的点了
f[i][x1][x2] = max1(f[i-][x1][x2], f[i-][x1][x2-], f[i-][x1-][x2],
f[i-][x1-][x2-])+a[x1][y1]+a[x2][y2];
}
}
}
}
int main()
{
cin >> t;
while(t--)
{
memset(a, , sizeof(a));
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
scanf("%d", &a[i][j]);
memset(f, , sizeof(f));
dp();
printf("%d\n", f[m+n-][n][n-]);
}
return ;
}

双程动态规划 nyoj61的更多相关文章

  1. 【Luogu1345】周游加拿大(动态规划)

    [Luogu1345]周游加拿大(动态规划) 题面 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边 ...

  2. 洛谷 P2747 Canada Tour 周游加拿大 动态规划

    Description 你赢得了一场航空公司举办的比赛,奖品是一张加拿大机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城 ...

  3. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  4. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  5. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  6. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  7. C#动态规划查找两个字符串最大子串

     //动态规划查找两个字符串最大子串         public static string lcs(string word1, string word2)         {            ...

  8. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

  9. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

随机推荐

  1. IIS里面网站停止了,不能启动

    IIS里面网站文件夹显示红色的叉叉,停止了,不能启动,所有站点都停止了: 原来是Word wide web publish service 服务停止了,启动就好了

  2. LoadRunner调用Java程序—性能测试-转载

    LoadRunner调用Java程序—性能测试   为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...

  3. Web---JSP注册技术的的演绎(3代)-JSP/EJB/Servlet/POJO/JavaBean

    我们可以这么理解JSP注册技术的发展过程: 第一代JSP技术:纯JSP开发. 第二代JSP技术:JSP+EJB开发. (EJB简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行.) 第三代J ...

  4. 关于npoi不能导入07以上版本的Excel

    因为在npoi版本中1.几之下的版本的不能导入07版本以上的excel是因为在其中的封装的方法中不支持, 所以很简单我们去网站上下一新的版本的npoi就是了,最好是新出来的2.1.1版本的就完全zhi ...

  5. HW3.24

    public class Solution { public static void main(String[] args) { int number = (int)(Math.random() * ...

  6. https原理:证书传递、验证和数据加密、解密过程解析

    写的太好了,就是我一直想找的内容,看了这个对https立马明白多了 http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知 ...

  7. hdoj 2568 前进

    前进 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. 程序员提高工作效率的15个技巧【Facebook】

    程序员提高工作效率的15个技巧[Facebook] 作者: habadog 日期: 2015 年 02 月 13 日发表评论 (0)查看评论 程序员提高工作效率的15个技巧[Facebook] 1,D ...

  9. 【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

    1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取 ...

  10. spring getbean 方法分析

    spring 缺省: 1.spring用DefaultListableBeanFactory.preInstantiateSingletons()建立bean实例 2.缺省采用单例模式 在最近的项目中 ...