当前位置: 首页 > news >正文

[题解]P7074 [CSP-J 2020] 方格取数

P7074 [CSP-J 2020] 方格取数

如果设 \(f_{i,j}\)\((1,1)\)\((i,j)\) 的最大权值和,上下相邻的两个元素的转移就是双向的了。有后效性,无法 DP。

image

不过题目说“不能重复经过已经走过的方格”,也就是说每一列只能往一个方向走。

所以可以加一维规定转移方向:\(f_{i,j,k=0/1}\)\(k=0\) 为从下面转移过来,\(k=1\) 为从上面转移过来。

这样 \(f_{i,j,0},f_{i,j,1}\) 的转移就没有后效性了:

\[\large \begin{cases} f_{i,j,0}=\max(f_{i+1,j,0},f_{i,j-1,0},f_{i,j-1,1})\\ f_{i,j,1}=\max(f_{i-1,j,1},f_{i,j-1,0},f_{i,j-1,1}) \end{cases} \]

时间复杂度 \(O(nm)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+2;
int n,m,a[N][N],f[N][N][2];
signed main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}memset(f,-0x3f,sizeof f);f[1][1][0]=f[1][1][1]=a[1][1];for(int i=2;i<=n;i++) f[i][1][1]=f[i-1][1][1]+a[i][1];for(int i=2;i<=m;i++){for(int j=1;j<=n;j++){f[j][i][1]=max({f[j-1][i][1],f[j][i-1][0],f[j][i-1][1]})+a[j][i];}for(int j=n;j>=1;j--){f[j][i][0]=max({f[j+1][i][0],f[j][i-1][0],f[j][i-1][1]})+a[j][i];}}cout<<f[n][m][1]<<"\n";return 0;
}

或者写记搜:

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+2,inf=1e15;
int n,m,a[N][N],f[N][N][2];
inline int dfs(int x,int y,bool d){if(x<1||x>n||y<1||y>m) return -inf;if(f[x][y][d]^(-inf)) return f[x][y][d];if(d) f[x][y][d]=max({dfs(x-1,y,1),dfs(x,y-1,0),dfs(x,y-1,1)});else  f[x][y][d]=max({dfs(x+1,y,0),dfs(x,y-1,0),dfs(x,y-1,1)});f[x][y][d]+=a[x][y];return f[x][y][d];
}
signed main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];f[i][j][0]=f[i][j][1]=-inf;}}f[1][1][0]=f[1][1][1]=a[1][1];cout<<dfs(n,m,1)<<"\n";return 0;
}
http://www.hskmm.com/?act=detail&tid=40155

相关文章:

  • 昨天线下赛的复盘
  • 二分查找边界
  • 同余最短路学习报告
  • 打包exe出错了:
  • Eclipse 安装Tomcat9 插件
  • 学习笔记:重链剖分
  • FRP 后端无法获取请求者IP解决方案
  • Day1
  • 正睿 2025 NOIP 20连测 Day9
  • Day24-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\InOut
  • noi2.0下vscode快速配置指北 - Gon
  • 【通讯协议】IIC
  • Robot Queries
  • TCP/IP协议概述
  • 102302136 林伟杰 数据采集与融合作业1
  • 爆零记
  • DataGrip2022导入和导出sql文件
  • 【CI130x 离在线】如何运行 curl 脚本
  • 日总结 18
  • 一场比赛
  • 新东方第三节课名言作文
  • 【性能优化必看】CPU耗时飙高?GC频繁停顿?一文教你快速定位!​
  • 十月阅读_3
  • 学校协同云盘怎么选?2025年10大热门教育网盘推荐与对比
  • GPU集群之间的交互
  • Java并发编程基础:从线程管理到高并发应用实践
  • 102302115方朴第一次作业
  • CF1267G Game Relics
  • 中考_体育
  • python爬取京东评论 -