题目描述

设有 N \times NN×N 的方格图 (N \le 9)(N≤9) ,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00 。如下图所示(见样例):

  1. A
  2. 0 0 0 0 0 0 0 0
  3. 0 0 13 0 0 6 0 0
  4. 0 0 0 0 7 0 0 0
  5. 0 0 0 14 0 0 0 0
  6. 0 21 0 0 0 4 0 0
  7. 0 0 15 0 0 0 0 0
  8. 0 14 0 0 0 0 0 0
  9. 0 0 0 0 0 0 0 0
  10. B

某人从图的左上角的 AA 点出发,可以向下行走,也可以向右走,直到到达右下角的 BB 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 00 )。
此人从 AA 点到 BB 点共走两次,试找出 22 条这样的路径,使得取得的数之和为最大。

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1: 复制

  1. 8
  2. 2 3 13
  3. 2 6 6
  4. 3 5 7
  5. 4 4 14
  6. 5 2 21
  7. 5 6 4
  8. 6 3 15
  9. 7 2 14
  10. 0 0 0
输出样例#1: 复制

  1. 67

说明

NOIP 2000 提高组第四题

思路:本题题意我就不解释了,一看这个题很像过河卒,过河卒是求路径数目,因此用一个递推求出,类似的本题也可以

我们用一个DP[i][j][k][z]表示第一个人走到map[i][j],第二个人走到map[k][z],此时走这种路径情况下的最大可获得最大取值

而DP[i][j][k][z]是由四个状态转移而来分别是DP[i-1][j][k-1][z],DP[i-1][j][k][z-1],DP[i][j-1][k-1][z],DP[i][j-1][k][z-1];

DP转移方程DP[i][j][k][z]=MAX(DP[i-1][j][k-1][z],DP[i-1][j][k][z-1],DP[i][j-1][k-1][z],DP[i][j-1][k][z-1])+maps[i][j]+maps[k][z];

还需要注意的是,(取走后的方格中将变为数字 0 )因此如果两者相遇就必须减掉一个maps[i][j]因为相遇的话肯定走的步数目相同,并且只有一个人拿到这个数字

因此减去maps[i][j]即可

当然还有什么SBFA,网络流的费用流做法等等非主流做法,以后更新

代码部分

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. using namespace std;
  5. int dp[][][][];
  6. int maps[][];
  7. int main(){
  8. int n;
  9. int x,y,z;
  10. scanf("%d",&n);
  11. while(){
  12. scanf("%d%d%d",&x,&y,&z);
  13. if (x==y && x==z && x==){
  14. break;
  15. }
  16. maps[x][y]=z;
  17. }
  18. for (int i=;i<=n;i++){
  19. for (int j=;j<=n;j++){
  20. for (int k=;k<=n;k++){
  21. for (int z=;z<=n;z++){
  22. dp[i][j][k][z]=max(max(dp[i-][j][k-][z],dp[i-][j][k][z-]),max(dp[i][j-][k-][z],dp[i][j-][k][z-]))+maps[i][j]+maps[k][z];
  23. if (i==k && j==z)dp[i][j][k][z]-=maps[i][j];
  24. }
  25. }
  26. }
  27. }
  28. cout<<dp[n][n][n][n]<<endl;
  29.  
  30. return ;
  31. }

洛谷P1004 方格取数-四维DP的更多相关文章

  1. 洛谷 - P1004 - 方格取数 - 简单dp

    https://www.luogu.org/problemnew/show/P1004 这道题分类到简单dp但是感觉一点都不简单……这种做两次的dp真的不是很懂怎么写.假如是贪心做两次,感觉又不能证明 ...

  2. 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏

    P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...

  3. 洛谷 P1004 方格取数 题解

    P1004 方格取数 题目描述 设有 \(N \times N\) 的方格图 \((N \le 9)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字\(0\).如下图所示(见样例): ...

  4. 洛谷 P1004 方格取数 【多线程DP/四维DP/】

    题目描述(https://www.luogu.org/problemnew/show/1004) 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...

  5. 洛谷 P1004 方格取数 【多进程dp】

    题目链接:https://www.luogu.org/problemnew/show/P1004 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 ...

  6. 洛谷P1004 方格取数

    网络流大法吼 不想用DP的我选择了用网络流-- 建模方法: 从源点向(1,1)连一条容量为2(走两次),费用为0的边 从(n,n)向汇点连一条容量为2,费用为0的边 每个方格向右边和下边的方格连一条容 ...

  7. 四维动规 洛谷P1004方格取数

    分析:这个题因为数据量非常小,可以直接用四维的DP数组 dp[i][j][k][l]表示第一个人走到位置(i,j),第二个人走到位置[k][l]时所取的数的最大和 状态转移方程可以轻松得出为:dp[i ...

  8. 洛谷 P1004 方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  9. 【动态规划】洛谷P1004方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

随机推荐

  1. 转 让Python在Android系统上飞一会儿

    让Python在Android系统上飞一会儿 地址: http://blog.csdn.net/ccwwff/article/details/6208260

  2. httpd的一些知识点

    一.httpd持久化连接:使用httpd之telnet测试其keepalive连接状态 作用:连接建立后,每个资源获取结束不会断开连接,而继续等待其他资源请求并完成传输. 1.KeepAlive  O ...

  3. 13LaTeX学习系列之---LaTeX插入表格

    目录 目录 前言 (一)插入表格的基础语法 1.说明 2.源代码 3.输出效果 (二)查看文档 目录 本系列是有关LaTeX的学习系列,共计19篇,本章节是第13篇. 前一篇:12LaTeX学习系列之 ...

  4. Kafka设计原理

    一.入门 1.简介 Apache Kafka是一个分布式消息发布订阅系统.它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log) ...

  5. Java虚拟机4:Java对象创建和对象访问

    1.对象创建 Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来.在语言层面上,创建对象(克隆.反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此.看一下在虚拟 ...

  6. centos7下安装docker(3.3创建镜像--修改dockerfile)

    1.我们在制作dockerfile的时候可能有些命令无法执行,导致镜像无法创建成功,这时我们可以修改dockerfile,从而达到我们的目的 查看Dockerfile内容 创建新的镜像,失败 Dock ...

  7. !important的用法

    如果写成:a{color:teal !important},IE6和其它高版本浏览器都认识,(IE6虽然不认识!important,但它还是能够认识!important之前的color:teal这个属 ...

  8. 2017-2018-2 20155314《网络对抗技术》Exp9 Web安全基础

    2017-2018-2 20155314<网络对抗技术>Exp9 Web安全基础 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤--WebGoat实践 0x10 We ...

  9. go标准库的学习-regexp

    参考:https://studygolang.com/pkgdoc 导入方式: import "regexp" regexp包实现了正则表达式搜索. 正则表达式采用RE2语法(除了 ...

  10. Qt 获取文件夹下所有文件

    Qt 获取文件夹下所有文件代码如下: QStringList getFileNames(const QString &path) { QDir dir(path); QStringList n ...