2 条题解
-
1
#include <bits/stdc++.h> using namespace std; const int MAXN = 1010; const int dx[] = {-1, 1, 0, 0}; const int dy[] = {0, 0, -1, 1}; int n, m; int p[MAXN][MAXN]; bool visited[MAXN][MAXN]; bool check(int d) { memset(visited, false, sizeof(visited)); queue<pair<int, int>> q; for (int j = 1; j <= m; j++) { if (p[1][j] <= d) { q.push({1, j}); visited[1][j] = true; } } while (!q.empty()) { auto t = q.front(); q.pop(); int x = t.first,y = t.second; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !visited[nx][ny] && p[nx][ny] <= d) { visited[nx][ny] = true; q.push({nx, ny}); } } } for (int j = 1; j <= m; j++) { if (!visited[n][j]) { return false; } } return true; } int main() { cin >> n >> m; int maxP = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> p[i][j]; maxP = max(maxP, p[i][j]); } } int left = 0, right = maxP; int ans = maxP; while (left <= right) { int mid = (left + right) / 2; if (check(mid)) { ans = mid; right = mid - 1; } else { left = mid + 1; } } cout << ans << endl; return 0; }
-
1
#include <bits/stdc++.h> using namespace std; const int N = 1010; int dx[4] = {0,0,-1,1},dy[4] = {1,-1,0,0}; int n,m; bitset<N> vis[N]; int grids[N][N]; int max1 = 0,ans = 0; bool f(int x,int y) { return (x>=1&&x<=n&&y<=m&&y>=1); } bool dfs(int x,int y ,int s) { if(x == n)return true; vis[x][y] = true; for(int j = 0;j<4;j++) { int nx = x+dx[j],ny = y+dy[j]; if(f(nx,ny)&&!vis[nx][ny]&&grids[nx][ny]<=s) { if(dfs(nx,ny,s)) return true; } } return false; } bool check(int s) { memset(vis, false, sizeof(vis)); for (int j = 1; j <= m; j++) { if (grids[1][j] <= s && dfs(1, j, s)) { return true; } } return false; } int main() { cin>>n>>m; for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) { cin>>grids[i][j]; max1 = max(max1,grids[i][j]); } int l = 0,r = max1; while(l<=r) { int mid = (l+r)/2; if(check(mid)) { ans = mid; r = mid-1; }else { l = mid+1; } } cout << ans << endl; return 0; }
- 1
信息
- ID
- 5957
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 22
- 已通过
- 10
- 上传者