记忆化搜索总出问题
  • 板块学术版
  • 楼主ayszYW
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/5/30 13:41
  • 上次更新2024/5/30 17:06:34
查看原帖
记忆化搜索总出问题
1111300
ayszYW楼主2024/5/30 13:41

P1434 代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int r,c,arr[1000][1000],ans=0,v[1000][1000];

int dfs(int a,int b,int st,int l){
	if(arr[a][b]>=l)return st;
	if(a<1||a>r||b<1||b>c)return st;
	if(v[a][b])return v[a][b]+st;
	
	
	
	v[a][b]=max(max(dfs(a+1,b,st+1,arr[a][b]),dfs(a-1,b,st+1,arr[a][b])),max(dfs(a,b-1,st+1,arr[a][b]),dfs(a,b+1,st+1,arr[a][b])));
	return v[a][b];
	
	
}

signed main(){
	cin>>r>>c;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++)cin>>arr[i][j];
	}
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			ans=max(ans,dfs(i,j,0,9999999999999));
		}
	}
	cout<<ans;
}

TRT - Treats for the Cows 代码:

#include<bits/stdc++.h>
using namespace std;

int n,arr[2200],v[2200][2200],f[2200],ans=0;

int dfs(int l,int r,int tans,int c){
	if(c==n)return tans;
	if(v[l][r])return v[l][r];
	
	int ret=0;
	v[l][r]=max(dfs(l+1,r,tans+arr[l]*(c+1),c+1),dfs(l,r-1,tans+arr[r]*(c+1),c+1));
	/*
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)cout<<v[i][j]<<" ";
		cout<<endl;
	}
	cout<<endl;
	*/
	
	return v[l][r];
	
	
}

int main(){
	cin>>n;
	memset(v,0,sizeof(v));
	for(int i=1;i<=n;i++)cin>>arr[i];
	
	ans=max(dfs(2,n,arr[1],1),dfs(1,n-1,arr[n],1));
	cout<<ans;
	
}
2024/5/30 13:41
加载中...