今天发现自己完全对这种dp没有思路……我果然太蒻了。/落泪.jpg

对于一个N*N的方格图中选择两条线路从左上角到右下角,其实只要用一个数组f[i][j][p][q]记录一个人走到(i,j)另一个人走到(p,q)的最优解就好啦。

由于行进的方向是固定的,即只可以向右或向下,所以只可能有四种情况:f[i-1][j][p-1][q],f[i-1][j][p][q-1],f[i][j-1][p-1][q],f[i][j-1][p][q-1]。

得到状态转移方程: f[i][j][p][q]=max(f[i-][j][p-][q],max(f[i-][j][p][q-],max(f[i][j-][p-][q],f[i][j-][p][q-])))+d[i][j]+d[p][q];

代入具体题目进行分析。

例题一 P1004 方格取数

四维dp模板题

分析对于走过后数字变为0的情况,其实只要判断在两条路径重复时减去d[i][j]就好了。

代码:

#include<iostream>
#include<cstdio> using namespace std; int n;
int d[][],f[][][][]; int main()
{
scanf("%d",&n);
while()
{
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
if(x==y&&y==v&&v==) break;
d[x][y]=v;
} for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int p=;p<=n;++p)
for(int q=;q<=n;++q)
{
f[i][j][p][q]=max(f[i-][j][p-][q],max(f[i-][j][p][q-],max(f[i][j-][p-][q],f[i][j-][p][q-])))+d[i][j]+d[p][q];
if(i==p&&j==q) f[i][j][p][q]-=d[i][j];//去重
} printf("%d\n",f[n][n][n][n]); return ;
}
例题二 P1006 传纸条
与上一题不同,这一题的两条线路无法重叠。而这两条不重叠的线路:

一定是一条在上一条在下的!

所以p只要枚举i+1~m。

又因为p的限定,i是肯定无法枚举到m的,所以我们的答案只要等价的输出f[m-1][n][m][n-1](实际上也是唯一解),因为(m-1,n)和(n,m-1)达到(m,n)都不用加上好心程度嘛。

代码:
#include<iostream>
#include<cstdio> using namespace std; int m,n;
int d[][],f[][][][]; int main()
{
scanf("%d%d",&m,&n);
for(int i=;i<=m;++i)
for(int j=;j<=n;++j)
scanf("%d",&d[i][j]); for(int i=;i<=m;++i)
for(int j=;j<=n;++j)
for(int p=i+;p<=m;++p) //避免两条线路重合
for(int q=;q<n;++q)
f[i][j][p][q]=max(f[i-][j][p-][q],max(f[i-][j][p][q-],max(f[i][j-][p-][q],f[i][j-][p][q-])))+d[i][j]+d[p][q]; printf("%d\n",f[m-][n][m][n-]); return ;
}

 
 

有关同时进行两条线路的四维dp的更多相关文章

  1. CodeForces 682D Alyona and Strings (四维DP)

    Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...

  2. luoguP1004 方格取数(四维DP)

    题目链接:https://www.luogu.org/problemnew/show/P1004 思路: 这道题是四维DP的模板题,与luoguP1006传纸条基本相似,用f[i][j][k][l]表 ...

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

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

  4. 四维dp,传纸条,方格取数

    四维dp例题 四维dp便是维护4个状态的dp方式 拿题来说吧. 1. 洛谷P1004 方格取数 #include<iostream> #include<cstdio> usin ...

  5. HDU 2196 Computer (树上最长路)【树形DP】

    <题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...

  6. Problem D: 乌龟棋【四维dp】

    Problem D: 乌龟棋 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 24  Solved: 15[Submit][Status][Web Boa ...

  7. P1004 方格取数(四维dp)

    P1004 方格取数 思路如下 这题是看洛谷大佬的思路才写出来的,所以我会把大佬的思路展示如下: 1⃣️:我们可以找到一个叫思维dp的东西,dp[i][j][k][l],其中前两维表示一个人从原点出发 ...

  8. codevs1068乌龟棋-四维DP,五维如何缩减一维

    我们从起点x开始暴力枚举所有决策 于是可以得到如下转移 void dfs(int x,int A,int B,int C,int D,int y) { if (x==n) {ans=max(ans,y ...

  9. HDU 2861 四维dp打表

    Patti and Terri run a bar in which there are 15 stools. One day, Darrell entered the bar and found t ...

随机推荐

  1. T-MAX组--项目冲刺(第二天)

    THE SECOND DAY 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 T-MAX组--项目冲刺(第二天) 团队名称 T-M ...

  2. 利用pgAgent创建定时任务

    使用Postgresql自带的pgAgent,可以很方便地创建定时执行任务.现在网上的资料都比较旧,Postgresql版本更新得比较快,导致网上的一些教程都不合用了,现在我写分享一下自己的经验. P ...

  3. linux系统下以存储从大到小并以K,M,G为单位的方式查看当前目录下的文件信息

    zhuazai:https://blog.csdn.net/sty945/article/details/79830915 前言 ls命令 ls -a ls -l ll du命令 du -s du - ...

  4. Debian9安装QT5.12.3

    打开虚拟机,打开火狐浏览器,输入网址下载QT5.12(linux版本,约13.G) download.qt.io/archive/qt/5.12/5.12.0/ 文件默认下载在Downloads文件夹 ...

  5. php异步处理

    <?php namespace Index\Controller; use Core\Controller; class test extends Controller { public fun ...

  6. git命令note

    日志查看 git log 太乱? git log --pretty=oneline 版本回退 git reset --hard commit_id git reset --hard HEAD^ 上上版 ...

  7. 如何使能hyper-v的增强功能?

    1. 在hyper-v的设置中使能增强功能 2. 运行在hyper-v中的虚拟机(笔者使用ubuntu版本为bionic)中安装xrdp 2.1 获取安装脚本 $ git clone https:// ...

  8. Python 线程,with的作用(自动获取和释放锁Lock)

    Python 线程,with的作用(自动获取和释放锁Lock) import threading import time num= #全局变量多个线程可以读写,传递数据 mutex=threading ...

  9. Flutter利用GridView实现网格的商品布局

    GridView.count 生成的是静态网格 效果: 代码: import 'package:flutter/material.dart'; void main() { runApp(MyApp() ...

  10. linux非root用户安装nginx

    先到官网http://nginx.org/en/download.html下载最新稳定版源码包,目前是1.16.1: 下完后通过rz上传至wlf用户soft目录下,退回上一级目录解压: $ cd so ...