题目描述 Description

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

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

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

8

2  3  13

2  6   6

3  5   7

4  4  14

5  2  21

5  6   4

6 3  15

7 2  14

0 0  0

样例输出 Sample Output

67

路一:
我们设f[i,j,k,l]表示第一条路走到(i,j),第二条路走到(k,l)的路线。
那么状态转移方程很好得出:
f[i,j,k,l]=max{f[i-1,j,k-1],f[i-1,j,k,l-1],f[i,j-1,k-1,l],f[i,j-1,k,l-1]}+(i==k&&j==l ? a[i][j] : a[i][j]+a[k][l])
值得注意的是:最后加上这个值的时候要注意如果路径走到同一点不能重复统计。
时间复杂度:O(n4),空间复杂度O(n4),对于本题n<=10完全足够。
思路二:
虽然思路一对于本题完全足够,但是如果n的范围大些的话,就无法办到了。
针对思路一,我们发现了问题,有一些状态是可以合并的,最重要的是:思路一,我们是同时开始走的,那么不必记录向右、向下的具体路径,只需要记录步数,显然,两条路的步数是统一的,然后再记录向下或向右的次数,就能根据这两者推算出向下或向右的次数。
那么设f[i,j,k]表示走到了第i步,第一条路径向走了j步,第二条路径向走了k步。
那么f[i,j,k]=max{f[i-1,j,k],f[i-1,j-1,k],f[i-1,j-1,k-1],f[i-1,j,k-1]}+(j==k ? a[i-j+1][i] : a[i-j+1][j]+a[i-k+1][k]);
显然,我们也要判断路径是否走到同一点,所以有后面的那个if( ? : 三目运算符)
时间复杂度:O(2n3),空间复杂度O(2n3),优化了一维。从n的四方优化至n的三方,是一个很大的进步。
至于代码,只要思路知道了,就无所谓了。
因为的线性的原因所以可以开二维
代码复杂度不高,50行足矣。
 
#include<bits/stdc++.h>
using namespace std ;
int G[][],dp[][];
int main( )
{
int n;
scanf("%d",&n);
int u,v,w;
for(int i= ; i<=n ; i++)
for(int j= ; j<=n ; j++)
G[i][j]=;
while(scanf("%d%d%d",&u,&v,&w)!=EOF)
{
if(u==&&v==&&w==)
break;
G[u][v]=w;
}
for(int k= ; k<=*n- ; k++)
{
for(int i=k ; i>= ; i--)
{
for(int j=k ; j>= ; j--)
{
dp[i][j]=max(max(dp[i][j],dp[i-][j]),max(dp[i][j-],dp[i-][j-]))+( i == j ? G[k-i+][j] : G[k-j+][j] + G[k-i+][i] );
}
}
}
printf("%d\n",dp[n][n]);
}

多线程DP (要一起行动才可以)的更多相关文章

  1. Matrix(多线程dp)

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. HDU 2686 Matrix 多线程dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 思路:多线程dp,参考51Nod 1084:http://www.51nod.com/onlin ...

  3. codevs1169, 51nod1084(多线程dp)

    先说下codevs1169吧, 题目链接: http://codevs.cn/problem/1169/ 题意: 中文题诶~ 思路: 多线程 dp 用 dp[i][j][k][l] 存储一个人在 (i ...

  4. 51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084 1084 矩阵取数问题 V2  基准时间限制:2 秒 空 ...

  5. 8786:方格取数 (多线程dp)

    [题目描述] 设有N*N的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点.在走 ...

  6. 51nod 1503 多线程dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1503 1503 猪和回文 题目来源: CodeForces 基准时间限制 ...

  7. NBOJv2——Problem 1002: 蛤玮的财宝(多线程DP)

    Problem 1002: 蛤玮的财宝 Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  %ll ...

  8. TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp

    做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  9. (多线程dp)Matrix (hdu 2686)

    http://acm.hdu.edu.cn/showproblem.php?pid=2686     Problem Description Yifenfei very like play a num ...

随机推荐

  1. Bind和Eval的不同用法 (转)

    今天在用DataList的模板列的时候习惯性地像在03中那样去给模板列的绑定字段加个处理函数: < asp:Label ID = " Label1 " runat = &qu ...

  2. android中finish和system.exit方法退出的区别

    finish只是将此activity推向后台,并没有释放资源. 而system.exit则是杀死进程,会释放资源

  3. 并发之AtomicInteger

    并发之AtomicInteger 1 java.util.concurrent.atomic概要     在java.util.concurrent.atomic包下存在着18个类,其中Integer ...

  4. day35 02-Hibernate持久化对象状态及状态转换

    hibernate内置有一个c3p0,不用引入c3p0的jar包也行. 现在其实可以不用去创建表和实体类.因为hibernate可以自动帮我们生成.只要把映射建好了它就可以自动帮我们生成. 创建实体类 ...

  5. Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口

    一.情况 1.目标:要在专门用于排序数据的DataSorter.java中实现对所有A类,B类,C类,D类等等的排序 2.初步想法:DataSorter.java的代码如下 public class ...

  6. java反射中,Class.forName和classloader的区别

    http://blog.csdn.net/qq_27093465/article/details/52262340

  7. 李兴华Java培训系列课程

    理解程序设计分层的思想: Dao设计模式的组成以及各部分的开发: 3.具体内容 在本次讲解之中,处理IO的部分暂时不会使用到之外,所有Java的重点的核心部分都会涉及到. 实际上在任何的环境下分层的概 ...

  8. scala中的self type

    scala目前的书籍有两<快学scala>和<scala编程>.资料确实不多,对这个语法使用只能结合使用进行理解. 先看源码: private[spark] trait Act ...

  9. MySQL中MyISAM引擎与InnoDB引擎性能简单测试

    [硬件配置]CPU : AMD2500+ (1.8G)内存: 1G/现代硬盘: 80G/IDE[软件配置]OS : Windows XP SP2SE : PHP5.2.1DB : MySQL5.0.3 ...

  10. java 英文笔记

    JDBC涉及到的单词 Driver 驱动器 DriverManager (Manager 处理者,经理,管理人; 干事,理事; 〈美〉(政党等的)领袖; 策士,干才,干练的人;) create Sta ...