有关同时进行两条线路的四维dp
今天发现自己完全对这种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];
代入具体题目进行分析。
四维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的更多相关文章
- CodeForces 682D Alyona and Strings (四维DP)
Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...
- luoguP1004 方格取数(四维DP)
题目链接:https://www.luogu.org/problemnew/show/P1004 思路: 这道题是四维DP的模板题,与luoguP1006传纸条基本相似,用f[i][j][k][l]表 ...
- 洛谷 P1004 方格取数 【多线程DP/四维DP/】
题目描述(https://www.luogu.org/problemnew/show/1004) 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0. ...
- 四维dp,传纸条,方格取数
四维dp例题 四维dp便是维护4个状态的dp方式 拿题来说吧. 1. 洛谷P1004 方格取数 #include<iostream> #include<cstdio> usin ...
- HDU 2196 Computer (树上最长路)【树形DP】
<题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...
- Problem D: 乌龟棋【四维dp】
Problem D: 乌龟棋 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 24 Solved: 15[Submit][Status][Web Boa ...
- P1004 方格取数(四维dp)
P1004 方格取数 思路如下 这题是看洛谷大佬的思路才写出来的,所以我会把大佬的思路展示如下: 1⃣️:我们可以找到一个叫思维dp的东西,dp[i][j][k][l],其中前两维表示一个人从原点出发 ...
- codevs1068乌龟棋-四维DP,五维如何缩减一维
我们从起点x开始暴力枚举所有决策 于是可以得到如下转移 void dfs(int x,int A,int B,int C,int D,int y) { if (x==n) {ans=max(ans,y ...
- HDU 2861 四维dp打表
Patti and Terri run a bar in which there are 15 stools. One day, Darrell entered the bar and found t ...
随机推荐
- markdown 插入链接
插入链接 []里面写链接的标题或描述,可以省略不加不写 , () 里面是链接,必须有必须写 例如 [百度](https://www.baidu.com) 百度 参考文章 Markdown 插入链接
- 小福bbs-冲刺集合
[小福bbs-冲刺集合] 一 . 7次团队冲刺博客的链接 第①次冲刺链接 第②次冲刺链接 第③次冲刺链接 第④次冲刺链接 第⑤次冲刺链接 第⑥次冲刺链接 第⑦次冲刺链接 冲刺的时间 日志博客的名称 当 ...
- appium+python 微信小程序的自动化
sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q -p 8889 -s addons.py http: ...
- adb-andorid记录当前手机的日志当前显示的app进程及activity,
adb logcat -v time> /home/sumsang.log adb shell dumpsys window | grep mCurrentFocus
- Android 9.0 Http不能访问网络
最近在做公司产品,一期完成,打包给测试,然后....一台手机连服务器都访问不了看日志如下: UnityWebRequest返回code:0,显示Unknow error 服务器接口是http://非域 ...
- End-To-End Memory Networks
End-To-End Memory Networks 2019-05-20 14:37:35 Paper:https://papers.nips.cc/paper/5846-end-to-end-me ...
- linux下的/dev/shm/及对Oracle 的影响
一./dev/shm/介绍: /dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里.因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm ...
- MiniDao & Freemarker & include
minidao include - 国内版 Binghttps://cn.bing.com/search?q=minidao+include&qs=n&form=QBRE&sp ...
- 为Apache添加MP4扩展
apxs是apache的一个辅助工具软件,它通常用来为apache安装扩展模块,甚至可以直接将.c的源程序自动编译成.so程序,并能自动配置httpd.conf文件,将新安装的扩展添加到配置文件中启用 ...
- C2678 二进制“>>”: 没有找到接受“std::stringstream”类型的左操作数的运算符(或没有可接受的转换)
C2678 二进制“>>”: 没有找到接受“std::stringstream”类型的左操作数的运算符(或没有可接受的转换)