目录

题目

思路

code


题目

题目链接https://www.luogu.com.cn/problem/P7074

思路

用dp[i][j][0]表示在(i,j)从左边来的最大值

用dp[i][j][1]表示在(i,j)从上边来的最大值

用dp[i][j][2]表示在(i,j)从下边来的最大值

详见下图

code

#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n, m;
LL mp[1001][1001];
LL dp[1001][1001][3];
LL dfs(int x, int y, int k) {
if (x < 1 or x > n or y < 1 or y > m) return INT_MIN;//判断是否越界
if (dp[x][y][k] != INT_MIN) return dp[x][y][k];//有没有算过
dp[x][y][k] = mp[x][y];//方便后面加
if (k == 0) {//每一个方向
dp[x][y][k] += max(max(dfs(x, y - 1, 1), dfs(x, y - 1, 0)), dfs(x, y - 1, 2));
return dp[x][y][k];
}
if (k == 1) {//每一个方向
dp[x][y][k] += max(dfs(x - 1, y, 0), dfs(x - 1, y, 1));
return dp[x][y][k];
}
if (k == 2) {//每一个方向
dp[x][y][k] += max(dfs(x + 1, y, 0), dfs(x + 1, y, 2));
return dp[x][y][k];
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> mp[i][j];
dp[i][j][0] = dp[i][j][1] = dp[i][j][2] = INT_MIN;
}
}
dp[1][1][0] = dp[1][1][1] = dp[1][1][2] = mp[1][1];
cout << max(dfs(n, m, 0), dfs(n, m, 1));//2不用,不可能从下面来
return 0;
}
/*
* 0→
* 1↓
* 2↑
*/

P7074 [CSP-J2020] 方格取数的更多相关文章

  1. HDU 1565&1569 方格取数系列(状压DP或者最大流)

    方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  2. NOIP200003方格取数

    NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...

  3. vijos 1563 疯狂的方格取数

    P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签]   背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...

  4. [HDU 1565+1569] 方格取数

    HDU 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

      HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...

  6. HDU-1565 方格取数(1)

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Me ...

  7. BZOJ 1475: 方格取数( 网络流 )

    本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...

  8. [动态规划]P1004 方格取数

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

  9. P2045 方格取数加强版

    P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...

  10. 线性规划与网络流24题●09方格取数问题&13星际转移问题

    ●(做codevs1908时,发现测试数据也涵盖了1907,想要一并做了,但因为“技术”不佳,搞了一上午) ●09方格取数问题(codevs1907  方格取数3) 想了半天,也没成功建好图: 无奈下 ...

随机推荐

  1. PHP 发送application/json POST请求

    PHP用CURL发送Content-type为application/json的POST请求方法 function json_post($url, $data = NULL) { $curl = cu ...

  2. vim 小记录

    将str1批量替换成str2 , 特殊符号前用转译符 \ :%s/str1/str2/g

  3. flink学习总结

    flink学习总结 1.Flink是什么? Apache Flink 是一个框架和分布式处理引擎,用于处理无界和有界数据流的状态计算. 2.为什么选择Flink? 1.流数据更加真实的反映了我们的生活 ...

  4. java 注解基础

    java 内置注解 注解 作用 描述 @Override 将覆盖父类中的方法 作用在子类的方法上 @Deprecated 代码被弃用 使用了被@Deprecated注解的代码则编译器将发出警告 @Su ...

  5. zzul1058_Java

    import java.util.Scanner;public class zzul1058 { public static void main(String[] args) { Scanner in ...

  6. Java笔记_成员方法传参机制

    成员方法传参机制(非常重要) Parameter(参数).Method(方法).Exercise(练习) 基本数据类型的传参机制 看一下案例,将main中的值传递给类中对象 /** * @ClassN ...

  7. sequlizejs学习笔记整理

    1.事务 try { const transaction = await sequelize.transaction(); const user = await User.findOne(..., { ...

  8. HelloWorld (用记事本写,在dos窗口里运行)

    编写HelloWorld (用记事本写,在dos窗口里运行) 首先在任何一个盘中创建一个文件夹 在文件夹里新建一个HelloWorld.java文件,注意后缀名是.java(将文件拓展名打开) 打开这 ...

  9. SDN第三次实验

    实验3:OpenFlow协议分析实践 实验目的 能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包: 能够借助包解析工具,分析与解释 OpenFlow协议的数据包交互过程与机 ...

  10. Create React App 安装时出现的错误解决方法

    安装很简单 创建一个文件夹  xxx 第一步:npx create-react-app my-app 第二部:cd my-app 第三部:npm start 安装时出现的错误  一 解决方案 一: 全 ...