G wa 1个点
  • 板块学术版
  • 楼主Esucu
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/6/15 21:48
  • 上次更新2024/6/16 09:53:14
查看原帖
G wa 1个点
998906
Esucu楼主2024/6/15 21:48

各路苣佬能帮我看一下是哪里错了吗?还是思路有问题?

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=105;
int n,m,p,sx,sy,a[N][N],dis[N][N],ans,f[2*N][N][N];
signed main(){
	scanf("%lld%lld%lld%lld%lld",&n,&m,&p,&sx,&sy);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%lld",&a[i][j]);
			dis[i][j]=abs(i-sx)+abs(j-sy);
		}
	}
	memset(f,0xcf,sizeof f);
	f[0][sx][sy]=0;
	for(int i=1;i<=min(p,max(n,m));i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=m;k++){
				f[i][j][k]=max(max(f[i-1][j-1][k],f[i-1][j+1][k]),max(f[i-1][j][k-1],f[i-1][j][k+1]))+a[j][k];
			}
		}
	}
	for(int k=0;k<=min(p,max(n,m));k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(k%2==dis[i][j]%2)ans=max(ans,f[k][i][j]+(p-k)*a[i][j]);
			}
		}
	}
	printf("%lld",ans);
	return 0;
}


2024/6/15 21:48
加载中...