AcWing 275. 传纸条
跟方格取数那题类似,唯一的区别是不能经过同一点 但是由于题面保证了每个格子的贡献都是正数,所以只要保证当前两点不同即可,因为从同一点转移过来的会被从不同点转移过来给优化掉
#include<bits/stdc++.h> using namespace std; #define int long long #define fr first #define se second typedef pair<int, int> PII; typedef unsigned long long ULL; const int INF = 0X3f3f3f3f, N = 50 + 10, MOD = 1e9 + 10; int w[N][N]; int f[2*N][N][N]; void work() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>w[i][j]; for(int k=3;k<=n+m-1;k++){ for(int i1=1;i1<=n;i1++) for(int i2=1;i2<=n;i2++){ int j1=k-i1,j2=k-i2; if(i1==i2 || !j1 || !j2 || j1>m || j2>m ) continue; int &x=f[k][i1][i2],t=w[i1][j1]+w[i2][j2]; // cout<<k<<" "<<i1<<" "<<j1<<" "<<i2<<" "<<j2<<" "<<t<<endl; x=max(x,f[k-1][i1][i2]+t); x=max(x,f[k-1][i1-1][i2]+t); x=max(x,f[k-1][i1][i2-1]+t); x=max(x,f[k-1][i1-1][i2-1]+t); } } cout<<f[n+m-1][n][n-1]; } signed main() { work(); return 0; }
本文作者:xhy666
本文链接:https://www.cnblogs.com/xhy666/p/16409472.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步