luogu 1006 传纸条
三/四维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 传纸条的更多相关文章
- Luogu 1006 传纸条 / NOIP 2008 传纸条(动态规划)
Luogu 1006 传纸条 / NOIP 2008 传纸条(动态规划) Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m ...
- [Luogu P1006]传纸条 (网格DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1006 Solution 挺显然但需要一定理解的网络(应该是那么叫吧)DP 首先有一个显然但重要的结论要发 ...
- 【暑假集训】HZOI2019 Luogu P1006 传纸条 二三四维解法
写三次丢失两次,我谔谔,以后再不在博客园先保存我就去死 题目内容 洛谷链接 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学被安排坐成一个\(m\)行.\(n\ ...
- LuoGu P1006 传纸条
题目传送门 这题嘛...方格取数和这题一样一样的 只不过这题是从左上到右下再回去罢了(来回一趟和来两趟有区别么?没有,那么这题和上题用一样的转移和状态就行了 没什么好说的,说一下我的错误好了: 人家图 ...
- 洛谷p1006 传纸条 三维解法
原题目如下 原地址https://www.luogu.com.cn/problem/P1006 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做 ...
- tyvj1011 传纸条
背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...
- NOIP2008 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- NOIP2008传纸条[DP]
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- NOIP2008 T3 传纸条 解题报告——S.B.S.
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
随机推荐
- SpringBoot(十七)_springboot跨域处理
本文转自:Vi的技术博客 什么是跨域 首先,我们需要了解一下一个URL是怎么组成的: // 协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址 http: + // + www.baidu ...
- 如何判断一条记录什么字段被修改了 [问题点数:40分,结帖人bluesukeke]
查询出来数据,在数据集编辑状态下,如何判断一条记录被修改了,哪些字段被修改了. 可用adoquery的Delta屬性...eg: ClientDataSet1.Delta... PS:POST前是準確 ...
- 51nod 1092(lcs)回文字符串
题目:给你一个字符串,问添加最少的字符数目,使之成为回文串 解题思路:将字符串倒置,求出字符串和倒置串的最长公共子序列,字符串的长度减去lcs的长度就是了.. 代码:#include<iostr ...
- Get The Treasury HDU - 3642(扫描线求三维面积交。。体积交)
题意: ...就是求体积交... 解析: 把每一层z抽出来,计算面积交, 然后加起来即可..! 去看一下 二维面积交的代码 再看看这个三维面积交的代码.. down函数里 你发现了什么规律!!! 参考 ...
- [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
传送门:https://www.luogu.org/problemnew/show/P1131 题目大意 给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共 ...
- 【洛谷P1273】有线电视网
题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,叶子节点有点权,每条边有边权,每经过一条边都减去该边权,每经过一个节点都加上该点权,求在保证权值和为非负数的前提下最多能经过多少个叶子节点. ...
- C++中hpp的适用
本文第一部分转载百度百科,在此感谢百度.第二部分示例为独立编写. hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即 ...
- bin内置函数
光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节.小Py光棍几十载,光棍自有光棍的快乐.让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出. ...
- 20145215《网络对抗》Exp6 信息搜集与漏洞扫描
20145215<网络对抗>Exp6 信息搜集与漏洞扫描 基础问题回答 哪些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和 ...
- 牛客多校第三场 A- PACM Team 背包/记忆路径
https://www.nowcoder.com/acm/contest/141#question 一眼背包,用四维dp记录在A,B,C,D条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...