前面事情太多了,所以搁了很多的题没做

  • 第一个不容易想的点就是这两条路是不会重叠的,所以可以转化成两条都从原点出发不相交的路径
  • 第二点就是该如何去表示这两种路径,第一种是用四维数组存位置(这里非法解的递推不会影响到正解)
  • 第二种用3维数组存每条路径只需要一个纵坐标或者横坐标就行
  • 最后一点不好想的就是两条路径的长度一样,在去重的时候其实j>=i,相等的时候就是重叠的时候

    从这道题中可以知道dp表示路径的方法(利用横纵坐标的和),和八皇后的解法有异曲同工之处

    四维解法
#include<iostream>
#include<utility>
using namespace std;
typedef long long ll;
#define fi(i,a,b) for(int i = a; i <= b; ++i)
#define fr(i,a,b) for(int i = a; i >= b; --i)
#define x first
#define y second
#define sz(x) ((int)(x).size())
#define pb push_back
using pii = pair<int,int>;
int n,m;
//#define DEBUG
int page[55][55];
int dp[55][55][55][55];
int max1(int a,int b,int c,int d){
return max(max(a,b),max(c,d));
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
fi(i,1,n) fi(j,1,m) cin >> page[i][j];
fi(i,1,n) fi(j,1,m) fi(k,1,n) fi(l,j+1,m) dp[i][j][k][l] = max1(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]) + page[i][j] + page[k][l];
cout << dp[n][m-1][n-1][m] << endl;
#ifdef DEBUG
//freopen(D:\in.txt,r,stdin);
#endif
return 0;
}

三维解法

#include<iostream>
#include<utility>
using namespace std;
typedef long long ll;
#define fi(i,a,b) for(int i = a; i <= b; ++i)
#define fr(i,a,b) for(int i = a; i >= b; --i)
#define x first
#define y second
#define sz(x) ((int)(x).size())
#define pb push_back
using pii = pair<int,int>;
//#define DEBUG
int dp[150][55][55];
int page[55][55];
int max1(int x,int y,int a,int b){
return max(max(x,y),max(a,b));
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
cin >> n >> m;
fi(i,1,n) fi(j,1,m) cin >> page[i][j];
fi(k,1,n+m) fi(i,1,m) fi(j,1,m) dp[k][i][j] = -1;
dp[2][1][1] = 0;
fi(k,3,n+m) fi(i,1,m-1) fi(j,i+1,m) {
dp[k][i][j] = max1(dp[k-1][i-1][j],dp[k-1][i][j],dp[k-1][i-1][j-1],dp[k-1][i][j-1]);
if(dp[k][i][j] == -1) continue;
dp[k][i][j] += page[k-i][i] + page[k-j][j];
} cout << dp[n+m-1][m-1][m] << endl;
#ifdef DEBUG
//freopen(D:\in.txt,r,stdin);
#endif
return 0;
}

P1006的更多相关文章

  1. 【洛谷】【动态规划(多维)】P1006 传纸条

    [题目描述:] 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸 ...

  2. 【题解】洛谷P1006传纸条

    链接 https://www.luogu.org/problemnew/show/P1006 日常牢骚 过年前最后一节课上完了坐标DP 也接触了一点区间DP(noi1995石子合并)下次做做看看吧 老 ...

  3. NOIP 2008 传纸条(洛谷P1006,动态规划递推,滚动数组)

    题目链接:P1006 传纸条 PS:伤心,又想不出来,看了大神的题解 AC代码: #include<bits/stdc++.h> #define ll long long using na ...

  4. 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏

    P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...

  5. 洛谷 P1006 传纸条 题解

    P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法 ...

  6. 洛谷P1006 传纸条【dp】

    题目:https://www.luogu.org/problemnew/show/P1006 题意: 给定一个m*n的矩阵,从(1,1)向下或向右走到(m,n)之后向上或向左走回(1,1),要求路径中 ...

  7. P1006 传纸条 /// DP+滚动数组

    题目大意: https://www.luogu.org/problemnew/show/P1006 题解 不难想到 求从起点到终点的两条不同的路 因为只能向右或向下走 所以纸条1和2不可能同时位于同一 ...

  8. 洛谷P1006 NOIP提高组2008 传纸条

    P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无 ...

  9. 洛谷p1006 传纸条 三维解法

    原题目如下 原地址https://www.luogu.com.cn/problem/P1006 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做 ...

  10. P1006 传纸条(二维、三维dp)

    P1006 传纸条 输入输出样例 输入 #1 复制 3 3 0 3 9 2 8 5 5 7 0 输出 #1 复制 34 说明/提示 [限制] 对于 30% 的数据,1≤m,n≤10: 对于 100% ...

随机推荐

  1. Android 开发中脚本 提高效率工具

    在安卓开发中我们常常需要获取日志,通常我们可以通过adb logcat 命令获取日志.同样,我没有可以通过脚本获取.其实质也是通过adb命令实现,只是把命名写入bat文件中,在win系统中直接双击就可 ...

  2. CSS——组合选择器

    1.后代选择器(包括儿子和孙子) .c1 .c2{ color: red; } 2.子代选择器(只选择儿子) .c3 > .c5{ color: red; } 3.与选择器 选择p标签下面的.c ...

  3. 2024 FIC取证比赛wp(更新中)

    本次竞赛容器挂载密码为: 2024Fic@杭州Powered~by~HL! 2024年4月,卢某报案至警方,声称自己疑似遭受了"杀猪盘"诈骗,大量钱财被骗走.卢某透露,在与某公司交 ...

  4. 地图坐标转换 WGS84、BD09与GCJ02的相互转换

    高德地图 WGS84转GCJ02 export function wgs84ToGcj02(lng, lat) { if (out_of_china(lng, lat)) { return [lng, ...

  5. 后端给前端rtmp和flv直播 播放方法

    const suffixal = this.videoObj.videoServer .split('?')[0] .split('.') .pop() var router = this.$rout ...

  6. for while 要求选慢速的,但是for不卡,while 跟 递归 这两个容易卡

    for比while慢,但是for不卡,while跟递归容易卡 int index = 0; bool jump=flase: for( index;index==0;;)/*这个空分号算一个语句*/ ...

  7. 安装sql 2012 时遇到“需要更新的以前的 Visual Studio 2010 实例。”规则失败。

    "需要更新的以前的 Visual Studio 2010 实例."规则失败.此计算机安装了需要 Service Pack 1 更新的 Visual Studio 2010,必须安装 ...

  8. 5 分钟小工具:使用 dive 分析 docker 镜像

    需求 拿到一个镜像之后,我想知道: 分层查看镜像里都有哪些文件 各层使用了什么命令构建的这个镜像 镜像里比较大的文件有哪些(可能需要优化) dive 工具介绍 dive 工具可以做这些分析.dive ...

  9. Ansible-playbook剧本进阶

    剧本高级特性篇 循环 在写 playbook 的时候发现了很多 task 都要重复引用某个相同的模块,比如一次启动10个服务,或者一次拷贝10个文件,如果按照传统的写法最少要写10次,这样会显得 pl ...

  10. 《Android开发卷——开卷》

    打算在自己在工作中遇到的问题,技术难点都记录下来,让其他人可以借鉴或者指点,这样既可以成长自己也可以成长别人.因为自己已经在工作了,所以遇到的问题非常具有代表性,所以不能简单简单的像网上一些小学生一样 ...