kg
by 星宿未泯 @ 2021-04-16 18:49:22
火后留名
by iamzq @ 2021-08-11 14:25:24
kg
by QuAckB33 @ 2021-08-30 12:06:03
kg
by jshshluogu @ 2021-10-10 20:39:10
# include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
//dp 还是两人的
const int N=105;
int f[N][N][N],n,m,a[N][N],ans=-1e9;//他们一定位于同一行 f[行][列1][列2](4维空间爆炸)
//类似NOIP2000 方格取数
//注意初始化和边界
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
memset(f,-0x3f,sizeof(f));//不存在的状态是-INF e.g.f[1][3][3]
//防止从一些不可能的状态转移过来
f[1][1][m]=a[1][1]+a[1][m];
for(int i=2;i<=n;i++)//行
{
for(int j=1;j<=m;j++)//列1
{
for(int k=1;k<=m;k++)//列2
{
for(int ii=j-1;ii<=j+1;ii++)//枚举转移
for(int iii=k-1;iii<=k+1;iii++)
if(ii>=1&&ii<=m&&iii>=1&&iii<=m)//两个都没有越界才行
f[i][j][k]=max(f[i][j][k],f[i-1]/*记得-1*/[ii][iii]);
if(j!=k)//没有撞上
f[i][j][k]+=(a[i][j]+a[i][k]);
else
f[i][j][k]+=a[i][j];
}
}
}
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
ans=max(ans,f[n][i][j]);//最后必须在最后一行
printf("%d\n",ans);
return 0;
}
```
```
by _l_l_l_l_l_ @ 2021-11-21 19:12:32
艹
有bug
by _l_l_l_l_l_ @ 2021-11-21 19:13:09
2022第一铲
by E_firework @ 2022-01-02 09:27:21
hp
by blue_ice @ 2022-06-24 15:37:27
![](//图.tk/g3!25)
by cfkk @ 2022-07-07 12:22:19
![](//图.tk/g3)
by frankfan7707 @ 2022-07-09 18:06:19