记忆化搜索https://ac.nowcoder.com/acm/contest/102742/D

include<bits/stdc++.h>

using namespace std;
const int N=1010;

int n,m,g[N][N],ans,t,ti[N][N],f[N][N];
bool st[N][N];
int np[2][2]={{1,0},{0,1}};

int dfs(int p,int x,int y){
if(f[x][y]!=0) return f[x][y];

for(int i=0;i<2;i++){
	int  nx=np[i][0]+x;
	int  ny=np[i][1]+y;
	if(p<ti[nx][ny] &&nx>=1 &&nx<=n&&ny>=1&&ny<=m ){
		f[x][y]=max(f[x][y],dfs(p+1,nx,ny)+g[nx][ny]);
	}
}
return f[x][y];

}
int main(){
cin>>n>>m;
memset(ti,0x3f,sizeof ti);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>g[i][j];
}
}
cin>>t;
for(int i=1;i<=t;i++){
int a,b,c;
cin>>a>>b>>c;
ti[a][b]=c;
}
cout<<dfs(1,1,1)+g[1][1];

return 0;

}

posted on 2025-03-07 20:59  下头小美  阅读(15)  评论(0)    收藏  举报