四维dp例题

四维dp便是维护4个状态的dp方式

拿题来说吧。


1. 洛谷P1004 方格取数

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=12;
int n;
int map[maxn][maxn];
int dp[maxn][maxn][maxn][maxn];
int main(){
cin>>n;
int x,y,z;
while(cin>>x>>y>>z&&(x!=0||x!=0||z!=0)){
map[x][y]=z;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
for(int l=1;l<=n;l++){
dp[i][j][k][l]=max(dp[i-1][j][k-1][l],max(dp[i-1][j][k][l-1],max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1])))+map[i][j]+map[k][l];
if(i==k&&j==l)
dp[i][j][k][l]-=map[k][l];
}
}
cout<<dp[n][n][n][n];
return 0;
}

本题便是一个四维dp例题

分析题目

发现维护两个dp数组或者进行两次dp不是很现实

观察到数据范围较小

便可以考虑四维dp

我们将走两次抽象成两个人同时走

我们以dp[i] [j] [k] [l]表示第一个人走到i j

第二个人走到 k l 时的总体最大值

我们便对i j k l 进行枚举

因为两人所走道路不能重合

所以当 i=k j=l时减去多加的那个就可以

2. 洛谷P1006 传纸条


#include<iostream>

using namespace std;
const int maxn=90;
int n,m;
int map[maxn][maxn];
int dp[maxn][maxn][maxn][maxn]; int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>map[i][j];
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
for(int k=1;k<=m;k++)
for(int l=1;l<=n;l++){
dp[i][j][k][l]=max(dp[i-1][j][k-1][l],max(dp[i-1][j][k][l-1],max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1])))+map[i][j]+map[k][l];
if(i==k&&j==l)
dp[i][j][k][l]-=map[k][l];
}
}
cout<<dp[m][n][m][n];
return 0;
}

基本就是同一题

双倍经验

还有滚动数组优化,

以后再更新

最新文章

  1. &quot;过期不候&quot;--具备生命周期的数据的技术实现方案
  2. 【JAVA框架】Hibernate 与Mybatis 区别
  3. tcpdump高级过滤技巧
  4. objective-c IOS应用更新
  5. Spring 框架下Controller 返回结果在EasyUI显示
  6. SharePoint report site.
  7. hibernate.cfg.xml配置文件和hbm.xml配置文件 模板
  8. 越狱后想禁用Spotlight
  9. linux定时执行文件
  10. linux Page cache和buffer cache----- systemtap
  11. _0_web_基础
  12. 巡风源码阅读与分析--querylogic函数
  13. 最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路
  14. ghithub中PHPOffice/PHPWord的学习
  15. Codeforces 1027D Mouse Hunt (强连通缩点 || DFS+并查集)
  16. C程序的编译与链接
  17. .NetCore程序发布到IIS上面
  18. nginx常用配置3
  19. explian执行计划
  20. transitionEnd和animationEnd的一个临时解决方案

热门文章

  1. FGPA_Microblaze UART 中断
  2. PHP end() 函数
  3. PHP pack() 函数
  4. 4.2 省选模拟赛 旅行路线 广义SAM
  5. springboot2.1.x版本报错总结
  6. SpringCloud系列之客户端负载均衡Netflix Ribbon
  7. linux的软件管理的rpm包和yum配置加tar解压包和安装编译./configuer
  8. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
  9. Mybatis insert 获取主键自增id
  10. 001_记一次ansible api二次开发遇到的小问题