社区讨论
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 条回复,欢迎继续交流。
正在加载回复...