Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int int64_t
- int dx[4] = {2, -2, 0, 0}, dy[4] = {0, 0, 2, -2};
- string endpoint = "V^><";
- vector<string> s;
- int dp[500][500];
- int a[500][500];
- bool used[500][500];
- int n, m;
- bool ok(int x, int y) {
- return 0 <= x && x < n && 0 <= y && y < m;
- }
- void dfs(int x, int y) {
- used[x][y] = true;
- dp[x][y] = a[x][y];
- for (int dir = 0; dir < 4; dir++) {
- int to_x = x + dx[dir];
- int to_y = y + dy[dir];
- if (ok(to_x, to_y) && !used[to_x][to_y] && s[to_x][to_y] == endpoint[dir]) {
- dfs(to_x, to_y);
- dp[x][y] += max(0ll, dp[to_x][to_y]);
- }
- }
- }
- int32_t main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0); cout.tie(0);
- cin >> n >> m;
- s.resize(n);
- for (int i = 0; i < n; i++) {
- cin >> s[i];
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- cin >> a[i][j];
- }
- }
- int sx = -1, sy = -1;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (s[i][j] == '.') {
- sx = i;
- sy = j;
- }
- }
- }
- dfs(sx, sy);
- cout << dp[sx][sy];
- }
Advertisement
Add Comment
Please, Sign In to add comment