【洛谷P1006】传纸条【DP】

洛谷P1006 所以状态转移方程为:(a[][]存权值) dp[x1][y1][x2][y2]=max(dp[x1][y1-1][x2][y2-1],dp[x1][y1-1][x2-1][y2],dp[x1-1][y1][x2][y2-1],dp[x1-1][y1][x2-1][y2])+a[x1][y1]+a[x2][y2];每行的 nn 个整数之间用空格隔开。四维dp,这也是最好想的,设f[i][j][k][l]为从小渊传到小轩的纸条到达(i,j),从小轩传给小渊的纸条到达(k,l)的路径上取得的最大的好心程度和。 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P1006
给出一个 n × m n\times m n×m的矩阵,每个格子中有权值,求从 ( 1 , 1 ) (1,1) (1,1)到 ( n , m ) (n,m) (n,m)的两条不相交路径使得路径权值之和最大。


思路:

很明显可以把题目看成两条不相交的路径从 ( 1 , 1 ) (1,1) (1,1)到 ( n , m ) (n,m) (n,m)。那么就可以设 f [ i ] [ j ] [ k ] [ l ] f[i][j][k][l] f[i][j][k][l]表示第一条路走到 ( i , j ) (i,j) (i,j),第二条路走到 ( k , l ) (k,l) (k,l)时的权值最大值。那么由于可以直接从上和下两个方向转移过来,所以就有方程
f [ i ] [ j ] [ k ] [ l ] = m a x ( m a x ( f [ i − 1 ] [ j ] [ k − 1 ] [ l ] , f [ i ] [ j − 1 ] [ k − 1 ] [ l ] ) , m a x ( f [ i − 1 ] [ j ] [ k ] [ l − 1 ] , f [ i ] [ j − 1 ] [ k ] [ l − 1 ] ) ) f[i][j][k][l]=max(max(f[i-1][j][k-1][l],f[i][j-1][k-1][l]),max(f[i-1][j][k][l-1],f[i][j-1][k][l-1])) f[i][j][k][l]=max(max(f[i−1][j][k−1][l],f[i][j−1][k−1][l]),max(f[i−1][j][k][l−1],f[i][j−1][k][l−1]))
+ a [ i ] [ j ] + a [ k ] [ l ] − ( ( i = = k & j = = l ) ? a [ i ] [ j ] : 0 ) +a[i][j]+a[k][l]-((i==k\&j==l)?a[i][j]:0) +a[i][j]+a[k][l]−((i==k&j==l)?a[i][j]:0)
那么最终答案很明显就是 f [ n ] [ m ] [ n ] [ m ] f[n][m][n][m] f[n][m][n][m]。


但是这样的时空复杂度太不理想了,所以可以考虑剪枝。
我们发现,如果走了 s u m sum sum步,横坐标为 x x x,那么很明显纵坐标就是 s u m − x sum-x sum−x。因为只能往下或右走。那么我们就可以想到另一种方法:
设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示走了 i i i步,两条路的横坐标分别是 j j j和 k k k时的最大权值和。
这样我们就可以算出两条路的纵坐标,进而进行转移。
方程如下:
f [ i ] [ j ] [ k ] = m a x ( m a x ( f [ i − 1 ] [ j ] [ k ] , f [ i − 1 ] [ j − 1 ] [ k − 1 ] ) , m a x ( f [ i − 1 ] [ j ] [ k − 1 ] , f [ i − 1 ] [ j − 1 ] [ k ] ) ) f[i][j][k]=max(max(f[i-1][j][k],f[i-1][j-1][k-1]),max(f[i-1][j][k-1],f[i-1][j-1][k])) f[i][j][k]=max(max(f[i−1][j][k],f[i−1][j−1][k−1]),max(f[i−1][j][k−1],f[i−1][j−1][k]))
+ a [ j ] [ i − j + 1 ] + a [ k ] [ i − k + 1 ] − ( j = = k ? a [ j ] [ i − j + 1 ] : 0 ) +a[j][i-j+1]+a[k][i-k+1]-(j==k?a[j][i-j+1]:0) +a[j][i−j+1]+a[k][i−k+1]−(j==k?a[j][i−j+1]:0)
那么最终答案就是 f [ n + m − 1 ] [ n ] [ n ] f[n+m-1][n][n] f[n+m−1][n][n]。
这样时间复杂度就变成了 O ( n 3 + n m ) O(n^3+nm) O(n3+nm)。


题外话
这道题还可以用网络流做。
摘自 https://www.luogu.org/blog/user21682/solution-p1006
在这里插入图片描述


代码:

O ( n 2 m 2 ) O(n^2m^2) O(n2m2)

#include <cstdio>
#include <iostream>
using namespace std;
int a[51][51],f[51][51][51][51],m,x,y,n,k;

int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      scanf("%d",&a[i][j]);
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      for (int q=1;q<=n;q++) 
       for (int p=1;p<=m;p++)
       {
          f[i][j][q][p]=max(f[i-1][j][q-1][p],max(f[i][j-1][q-1][p],max(f[i-1][j][q][p-1],f[i][j-1][q][p-1])))+a[i][j]+a[q][p];
          if(i==q&&j==p)f[i][j][q][p]-=a[i][j];
       }
    printf("%d",f[n][m][n][m]);
    return 0;
}

O ( n 3 + n m ) O(n^3+nm) O(n3+nm)

#include <cstdio>
#include <iostream>
#define N 60
using namespace std;

int n,m,f[N+N][N][N],a[N][N];

int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      scanf("%d",&a[i][j]);
    for (int i=1;i<n+m;i++)
     for (int j=1;j<=n;j++)
      for (int k=1;k<=n;k++)
       if (i-j+1>0&&i-k+1>0)
       {
       		f[i][j][k]=f[i-1][j][k];
       		f[i][j][k]=max(f[i][j][k],f[i-1][j-1][k-1]);
       		f[i][j][k]=max(f[i][j][k],f[i-1][j][k-1]);
       		f[i][j][k]=max(f[i][j][k],f[i-1][j-1][k]);
       		f[i][j][k]+=a[j][i-j+1]+a[k][i-k+1];
       		if (j==k) f[i][j][k]-=a[j][i-j+1];
       }
    printf("%d\n",f[n+m-1][n][n]);
    return 0;
}
数学建模学习(78):多输入多输出回归预测模型(结合XGBoost实现) 多输入多输出回归预测问题求解 阅读详情

相关推荐

速腾RS-LiDAR-16激光雷达ROS环境搭建与点云可视化实战指南

本文提供速腾RS-LiDAR-16激光雷达在ROS环境下的完整搭建与可视化实战指南。从硬件连接、网络配置、驱动安装编译,到核心参数详解与Rviz点云可视化,手把手解决IP设置、坐标系对齐等常见问题,帮助开发者快速实现激光雷达三维点云数据的采集与显示。

weixin_29271263的博客 369

【洛谷】【动态规划】P1006:传纸条(C/C++)

洛谷(蓝桥杯) 传纸条 动态规划 题解

f2568ryghi的博客 3170

保姆级教程:在Jetson Nano上从零移植OV5647 CSI摄像头驱动(附完整调试记录)

本文提供了一份详细的Jetson Nano OV5647 CSI摄像头驱动移植教程,涵盖硬件准备、驱动框架分析、设备树配置、驱动移植核心修改点及调试技巧。通过V4L2框架和Tegra平台适配,开发者可快速实现摄像头驱动的移植与优化,适用于边缘计算和嵌入式视觉应用。

weixin_27869497的博客 518

洛谷P1006(传纸条[NOIP 2008 提高组])题解

洛谷P1006详解10000字

2201_75316840的博客 939

全网最全的AItium Designer 16下载资源与安装步骤

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。...

WQ的博客 1万+

tft_espi 中文字体及自定义字体制作(tft.eSPI模块)

tft.eSPI库自定义字体方法 先下载 processing 然后安装到mixly安装目录下找到tft_eSPI文件夹。

琢磨侠的博客 2762

【洛谷】 P1006 [NOIP2008提高组]传纸条

纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标 (1,1),小轩坐在矩阵的右下角,坐标 (m,n)。还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用 0 表示),可以用一个[0,100] 内的自然数来表示,数越大表示越好心。如果各个子问题不是独立的(即重复的),且不同子问题的个数是有限的,那么如果我们可以保存已经解决的子问题的答案,而在需要时再找出已经求得的答案,这样就可以避免大量的重复计算,以此减少时间复杂度。本题使用动态规划求解。

2302_80216196的博客 1347

机器人运动不流畅?手把手教你用ACCSET调整ABB/FANUC点位加速度

本文针对ABB和FANUC工业机器人运动不流畅、拐角抖动、到位震颤等常见问题,提供了详细的解决方案。核心在于使用ACCSET指令(ABB)或ACC选项(FANUC)调整机器人的点位加速度与减速度参数。文章通过实战案例与系统化调试流程,手把手指导工程师优化运动性能,实现平稳、精准的机器人运动控制。

gpu4optimizer的博客 284

P1006传纸条(NOIP2008)

题目描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸...

Tmotfl的博客 1936

国资e学快速学习实战教程

本文主要介绍了国资e学快速学习实战教程,希望能对同学们有所帮助。 文章目录 1. 前言 2. 实战教程

weixin_43178406的博客 11万+

9篇5章2节:NHIS 数据库的常规数据下载

文章概述了 NHIS-Teen、NHPI NHIS 等补充性调查以及 2024 年 NHIS 数据资源的具体内容,包括问卷材料、技术文档和数据模块,为研究者高效、规范地使用 NHIS 数据提供参考框架。

MD Code 1439

noip2008传纸条

传纸条 (传送门)洛谷 题目描述(样例数据自己找) 此题我们分析一下,可以用dfs和动规来做此题。第一种做法是四维dp,这也是最好想的, 设f[i][j][k][l]为从小渊传到小轩的纸条到达(i,j),从小轩传给小渊的纸条到达(k,l)的路径上取得的最大的好心程度和。 完全可以换一个思路想,即求从给定的起点出发走到指定位置的两条最短严格不相交路线。 那么特别显然,转移方程是 f[i][j][k...

便当口袋 831

Orin 10G PHY网络分析

由于调试用的10G PHY,所以整理下分析过程; 1.从Orin devkit 丝印来看RJ45 对应J17 通过搜索 MGBE_PHY_A_N 找到连接的10G PHY, 原理图上标明了MDIO address 为0x0, 使用的PHY 芯片为 Marvel 的AQR113C, 主要特性: 架构: 关键特征: MDC 连接了GPIO26_XFI0_MDC; MDIO 连接了GPIO25_XFI0_MDIO; 通过pinmux_config映射表也可以..

乐于分享 5653

洛谷 P1006 传纸条 三维dp

洛谷 P1006 传纸条 三维dp 代码如下: 题解: 因为是从上方和从下方传纸条,也就相当于从左上角连续传两张纸条,路径不重复,效果相同。 从左上来看的话就只能向右或向下传纸条。 那么两张纸条在过程中就一定在一条斜线上,而在一条斜线上纵坐标与横坐标相加相等。 我们需要一个三维dp数组: 第一维度维护的是在传的过程中纵坐标与横坐标的和。 在同一斜线上,剩下表示两个点的纵坐标就可以表示这两个点的位置...

化身孤岛的鲸o的博客 511

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

双路DP:洛谷P1006 传纸条

双路DP:洛谷P1006 传纸条题目思路代码 题目 传送门 思路 经典的双路DP,问题看成有两个人,从左上走到右下,除了起点/重点外,路径不重合,求两个人经过的点的权值之和最大值 设f [p] [i] [j]表示当前走了p步,第一个人走到第i行,第二个人走到第j行,除起点外路径不重合的条件下,权值之和的最大值 显然,通过p,i,j,我们是可以求出当点两个人的坐标的(因为只能向右或向下走):(i,p-i+1),(j,p-j+1) 则状态转移: f[p][i][j]=max⁡{max⁡{f[p−1][i−1][

weixin_46304837的博客 281

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

洛谷 P1006 传纸条

洛谷 P1006 传纸条1.问题分析2.具体代码3.总结 题目链接 (第一次写没想出来,毕竟是第一次遇见四维dp) 1.问题分析 本质上就是P1004问题,代码都不用改 利用y总的dp问题分析方法: 转换成小渊向小轩传两次纸条。 集合f(a,b,c,d)的含义为:两次分别走到(a,b),(c,d)两点。 性质为max。 集合的划分: 1.可以划分成四个部分1.f(a-1,b,c-1,d),2.f(...

sancpp的博客 351

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【洛谷】P1006 传纸条

P1006 传纸条 0.总结 Get to the points first. The article comes from LawsonAbs! 坐标上的dp题 1.题意 这题和P1004 方格取数 很像。 2.分析 题中有坐标的dp题都是有明显提示的,那么这题也是一样,很容易就能找到状态转移方程。 令dp[i][x1][x2]表示的是一共走了i步,然后坐标点在(x1,i+2-y1),(...

说文科技,做有态度的研究。 772

DFS的高维【四维DFS】洛谷p1006传纸条

本题的原理与洛谷p1004方格取数相同。在不考虑优化的情况下可以直接使用四维dp,因为数据较弱,最多也只有505050*50=6250000的复杂度,不用担心爆空间或超时。 还请各位用三维二维数组的大佬不要鄙视本蒟蒻~ 题解: 就是用f[i][j][k][l],其中[i][j]存小渊来信的路径,[k][l]则存小轩的。这信一来一回啊,可以等价于信从小渊这里向右下方传了两次,(这样是不是基本上算p1...

qq_45447132的博客 417

洛谷P1006 传纸条【dp】

题目:https://www.luogu.org/problemnew/show/P1006 题意: 给定一个m*n的矩阵,从(1,1)向下或向右走到(m,n)之后向上或向左走回(1,1),要求路径中每个点都不重复。 问使得权值和最大的路径的权值是多少。 思路: 这道题要学会把问题转化成,找两条从(1,1)到(m, n)互不相交的路径。因为过去和回来其实是相对的。 如果用一个四维dp,...

weixin_30849403的博客 91

洛谷P1006,传纸条(DP)

可以设置四维DP: dp[i,j,k,l]表示小渊走到( i, j ),小轩走到( k, l )时收获的最大好心值。 因为小渊和小轩都有两个方向走,所以dp[i,j,k,l]是从四种可能的状态转移过来的: dp[i,j,k,l]=max(dp[i-1,j,k+1,l],dp[i-1,j,k,l+1],dp[i,j-1,k+1,l],dp[i,j-1,k,l+1]) + map[i,j] + map...

shamansi99的博客 291

洛谷P1006 传纸条(多维DP)

小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1(1,1),小轩坐在矩阵的右下角,坐标(m,n)(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小...

erge的博客 236

[洛谷]P1006 传纸条 (#线性dp)

题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1(1,1),小轩坐在矩阵的右下角,坐标(m,n)(m,n)。从小渊传到小轩的纸条只可以向下或者向...

A.pro的博客 324

洛谷 P1006 传纸条(线性DP, 进阶指南)

算法竞赛进阶指南, 270 页, 线性DP 本题要点: 1、状态表示: 每一条路径的第i步和所在的坐标点 (x, y) 的关系 x + y == i + 2; 因此,每条路径的三个未知量(i, x, y) 可以用两个 未知量来(i, x)表示 // y == i + 2 - x dp[i][x1][x2] 表示两条路径长度i,而且第一条路径末尾在x1行,第二条在x2 行,取得的最大值 2、转态转移: 根据路径的走向,分类讨论: 1)第一条:往右, 第二条:往右 2)第一条:往右, 第二条:往下 3)第一条:

qq_38232157的博客 245

【DP】洛谷 P1006 传纸条

题目描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条

。。。。 351

洛谷P1006 传纸条 解题报告

文章目录原题:题目描述输入输出格式输入输出样例说明题目链接题目分析:代码: 原题: 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩...

Shu_B的博客 497
上一篇: 【洛谷P1057】传球游戏【DP】
下一篇: 【USACO2.2】解题报告
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值