记搜 WA 10pts 求调
查看原帖
记搜 WA 10pts 求调
1283988
leozhao123楼主2024/10/20 11:34

暴搜 25pts,TLE 记录

记搜 10pts,WA 记录

记搜代码:

#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 0x8000000000000000
using namespace std;
const int N=1e3+2;
using ll=long long;
ll n,m,mp[N][N],dp[N][N][4];
bitset<N>vst[N];
ll dfs(ll x,ll y) {
	if(x==n&&y==m) return mp[n][m];
	ll tmp;
	if(x-1>0&&!vst[x-1][y]&&dp[x][y][0]==INF) {
		vst[x-1][y]=1;
		tmp=dfs(x-1,y);
		dp[x][y][0]=(tmp==INF?INF:tmp+mp[x][y]);
		vst[x-1][y]=0;
	}
	if(x+1<=n&&!vst[x+1][y]&&dp[x][y][1]==INF) {
		vst[x+1][y]=1;
		tmp=dfs(x+1,y);
		dp[x][y][1]=(tmp==INF?INF:tmp+mp[x][y]);
		vst[x+1][y]=0;
	}
	if(y+1<=m&&!vst[x][y+1]&&dp[x][y][2]==INF) {
		vst[x][y+1]=1;
		tmp=dfs(x,y+1);
		dp[x][y][2]=(tmp==INF?INF:tmp+mp[x][y]);
		vst[x][y+1]=0;
	}
//	sort(dp[x][y],dp[x][y]+3);
	ll ans=max(max(dp[x][y][0],dp[x][y][1]),dp[x][y][2]);
	return ans;
//	return dp[x][y][0]=dp[x][y][1]=dp[x][y][2]=(dp[x][y][2]==INF?INF:dp[x][y][2]+mp[x][y]);
}
int main() {
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(ll i=1;i<=n;++i)
		for(ll j=1;j<=m;++j) {
			fill(dp[i][j],dp[i][j]+4,INF);
			cin>>mp[i][j];
		}
	vst[1][1]=1;
	cout<<dfs(1,1);
	return 0;
}

求调

2024/10/20 11:34
加载中...