社区讨论

WA声一大片,谁来帮帮我?

P1004[NOIP 2000 提高组] 方格取数参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lpgymhje
此快照首次捕获于
2023/11/27 21:43
2 年前
此快照最后确认于
2023/11/28 09:36
2 年前
查看原帖
CPP
#include<iostream>
using namespace std;
int n ;
int z , l , ml;
int g[1005][1005] , f[1005][1005], sum = -1 , sum1 = -1;
int dx[4] = {1 , -1 , 0 , 0};
int dy[4] = {0 , 0 , 1 , -1};
void dfs(int x , int y , int ans){
	if(x == n && y == n){
		sum = max(ans , sum) ;
		return ;
	} else {
		for(int i = 0 ; i < 4 ; i ++){
			int tx = x + dx[i] ;
			int ty = y + dy[i] ;
			if(tx > 0 && tx <= n && ty > 0 && ty <= n){
				if(f[tx][ty] == -1){
					f[tx][ty] = 0 ;
					dfs(tx , ty , ans + g[tx][ty]) ;
					g[tx][ty] = 0 ;
				}
			}
		}
	}
}
void dfs1(int x , int y , int ans){
	if(x == 1 && y == 1){
		sum1 = max(ans , sum1) ;
		return ;
	} else {
		for(int i = 0 ; i < 4 ; i ++){
			int tx = x + dx[i] ;
			int ty = y + dy[i] ;
			if(tx > 0 && tx <= n && ty > 0 && ty <= n){
				if(f[tx][ty] == -1){
					f[tx][ty] = 0 ;
					dfs(tx , ty , ans + g[tx][ty]) ;
					g[tx][ty] = 0 ;
				}
			}
		}
	}
}
int main(){
	cin >> n ;
	memset(f , -1 , sizeof(f)) ;
	for(;;){
		cin >> z >> l >> ml ;
		if(z == 0 && l == 0 && ml == 0) break ;
		g[z][l] = ml ;
	}
	dfs(1 , 1 , 0) ;
	dfs1(n , n , 0) ;
	cout << sum + sum1 << endl;
}
这是搜索

回复

0 条回复,欢迎继续交流。

正在加载回复...