三/四维dp,将两次传递均看作从左上而来,在dp过程中注意防止越界/重合

f[i][j][k][l]直接枚举两轮的点,如下

#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
const int N=;
using namespace std;
int f[N][N][N][N],mp[N][N],m,n;
int MAX(int a,int b,int c,int d){
int m1=max(a,b),m2=max(c,d);
int m3=max(m1,m2);
if(m3==a) return a;
if(m3==b) return b;
if(m3==c) return c;
if(m3==d) return d;
}
int main(){
scanf("%d%d",&m,&n);
rep(i,,m)rep(j,,n) scanf("%d",&mp[i][j]);
rep(i,,m)rep(j,,n)rep(k,,m)rep(l,j+,n)
f[i][j][k][l]=mp[i][j]+mp[k][l]+MAX(f[i][j-][k][l-],f[i][j-][k-][l],f[i-][j][k][l-],f[i-][j][k-][l]);
printf("%d\n",f[m][n-][m-][n]);
return ;
}

但空间时间并不优秀,利用i+j=k+l=step的特性减少一维,分别只枚举i.k再计算另一维即可

#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
const int N=;
using namespace std;
int f[N<<][N][N],mp[N][N],m,n;
int MAX(int a,int b,int c,int d){
int m1=max(a,b),m2=max(c,d);
int m3=max(m1,m2);
if(m3==a) return a;
if(m3==b) return b;
if(m3==c) return c;
if(m3==d) return d;
}
int main(){
scanf("%d%d",&m,&n);
rep(i,,m)rep(j,,n) scanf("%d",&mp[i][j]);
rep(k,,m+n-)rep(i,,m)rep(j,,m){
if(k-i<||k-j<) continue;
f[k][i][j]=mp[i][k-i+]+mp[j][k-j+]+MAX(f[k-][i][j],f[k-][i][j-],f[k-][i-][j],f[k-][i-][j-]);
if(i==j) f[k][i][j]-=mp[i][k-i+];
}printf("%d\n",f[m+n-][n][n]);
return ;
}

还有滚动数组可以降至二维,但不会写...emmm

luogu 1006 传纸条的更多相关文章

  1. Luogu 1006 传纸条 / NOIP 2008 传纸条(动态规划)

    Luogu 1006 传纸条 / NOIP 2008 传纸条(动态规划) Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m ...

  2. [Luogu P1006]传纸条 (网格DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P1006 Solution 挺显然但需要一定理解的网络(应该是那么叫吧)DP 首先有一个显然但重要的结论要发 ...

  3. 【暑假集训】HZOI2019 Luogu P1006 传纸条 二三四维解法

    写三次丢失两次,我谔谔,以后再不在博客园先保存我就去死 题目内容 洛谷链接 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学被安排坐成一个\(m\)行.\(n\ ...

  4. LuoGu P1006 传纸条

    题目传送门 这题嘛...方格取数和这题一样一样的 只不过这题是从左上到右下再回去罢了(来回一趟和来两趟有区别么?没有,那么这题和上题用一样的转移和状态就行了 没什么好说的,说一下我的错误好了: 人家图 ...

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

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

  6. tyvj1011 传纸条

    背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...

  7. NOIP2008 传纸条

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

  8. NOIP2008传纸条[DP]

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

  9. NOIP2008 T3 传纸条 解题报告——S.B.S.

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

随机推荐

  1. 使用Hexo搭建Github静态博客

    1. 环境环境 1.1 安装Git 默认配置就好 1.2 安装node.js 下载:http://nodejs.org/download/ 安装时直接保持默认配置即可. 2. 配置Github 1.1 ...

  2. OneZero产品视频

    产品视频地址:http://v.youku.com/v_show/id_XMTU1MDMwOTk2OA==.html

  3. Test Scenarios for a window

    1 check if default window size is correct2 check if child window size is correct3 check if there is ...

  4. 近端梯度算法(Proximal Gradient Descent)

    L1正则化是一种常用的获取稀疏解的手段,同时L1范数也是L0范数的松弛范数.求解L1正则化问题最常用的手段就是通过加速近端梯度算法来实现的. 考虑一个这样的问题: minx  f(x)+λg(x) x ...

  5. Square Root

    Square RootWhen the square root functional configuration is selected, a simplified CORDIC algorithm ...

  6. BZOJ4943 NOI2017蚯蚓排队(哈希+链表)

    能看懂题就能想到正解.维护所有长度不超过k的数字串的哈希值即可,用链表维护一下蚯蚓间连接情况.由于这样的数字串至多只有nk个,计算哈希值的总复杂度为O(nk),而分裂的复杂度为O(ck^2),询问复杂 ...

  7. POJ2492-A Bug's Life-并查集扩展应用

    维护一个relation数组,保留着此元素和根元素之间的性别关系.之后就可以判断gay了. #include <cstdio> #include <algorithm> #in ...

  8. Codeforces Round #382 (Div. 2) C. Tennis Championship

    C. Tennis Championship time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. G1收集器的收集原理

    G1收集器的收集原理 来源 http://blog.jobbole.com/109170/ JVM 8 内存模型 原文:https://blog.csdn.net/bruce128/article/d ...

  10. HNOI2017大佬

    贼难的一道题 虽然算法都不难,但组合起来就是想不到 首先,最简单的一步,对所有大佬,嘲讽你减的自信值和你做水题回复自信值都是不变的,写个\(dp\),设\(dp[i][j]\)表示第\(i\)天自信值 ...