답안 #229075

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
229075 2020-05-03T10:43:45 Z Vimmer Maja (COCI18_maja) C++14
55 / 110
122 ms 65540 KB
#include <bits/stdc++.h>

//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("fast-math")
//#pragma GCC optimize("no-stack-protector")

#define F first
#define S second
#define sz(x) ll(x.size())
#define pb push_back
#define N 100005
#define MOD ll(998244353)

using namespace std;

//using namespace __gnu_pbds;

typedef long double ld;
typedef long long ll;

typedef short int si;

//typedef tree <int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;



ll dp[105][105][105][105], ar[105][105], mx[105][105][400], ans;

int main()
{
   // freopen("input.txt", "r", stdin);// freopen("output.txt", "w", stdout);

    ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    ll n, m, a, b, k;

    cin >> n >> m >> a >> b >> k;

    for (ll i = 1; i <= n; i++)
        for (ll j = 1; j <= m; j++) cin >> ar[i][j];

    for (int x = 1; x <= n; x++)
        for (int y = 1; y <= m; y++)
        {
            dp[x][y][x][y] = ar[x][y];

            for (ll i = x; i <= n; i++)
             for (ll j = y; j <= m; j++)
             {
                 if (i == x && j == y) continue;

                 dp[x][y][i][j] = max(dp[x][y][i][j], ar[i][j] + max((i - 1 >= x ? dp[x][y][i - 1][j] : 0), (j - 1 >= y ? dp[x][y][i][j - 1] : 0)));
             }

            for (ll i = x; i >= 1; i--)
              for (ll j = y; j >= 1; j--)
              {
                   if (i == x && j == y) continue;

                   dp[x][y][i][j] = max(dp[x][y][i][j], ar[i][j] + max((i + 1 <= x ? dp[x][y][i + 1][j] : 0), (j + 1 <= y ? dp[x][y][i][j + 1] : 0)));
              }

            for (ll i = x; i >= 1; i--)
              for (ll j = y; j <= m; j++)
              {
                   if (i == x && j == y) continue;

                   dp[x][y][i][j] = max(dp[x][y][i][j], ar[i][j] + max((i + 1 <= x ? dp[x][y][i + 1][j] : 0), (j - 1 >= y ? dp[x][y][i][j - 1] : 0)));
              }

            for (ll i = x; i <= n; i++)
              for (ll j = y; j >= 1; j--)
              {
                   if (i == x && j == y) continue;

                   dp[x][y][i][j] = max(dp[x][y][i][j], ar[i][j] + max((i - 1 >= x ? dp[x][y][i - 1][j] : 0), (j + 1 <= y ? dp[x][y][i][j + 1] : 0)));
              }
        }

    for (ll i = 1; i <= n; i++)
        for (ll j = 1; j <= m; j++)
          for (ll x = 1; x <= n; x++)
            for (ll y = 1; y <= m; y++)
              {
                 ll rst = abs(x - i) + abs(y - j);

                 if (i == x && j == y) continue;

                 mx[i][j][rst] = max(mx[i][j][rst], dp[i][j][x][y]);
              }

    for (ll i = 1; i <= n; i++)
        for (ll j = 1; j <= m; j++)
            for (ll x = 1; x <= n; x++)
                for (ll y = 1; y <= m; y++)
                {
                    if (x == i && y == j) continue;

                    ll rst = abs(a - i) + abs(b - j);

                    if (rst * 2 > k) continue;

                    ll sum = 2 * dp[a][b][i][j];

                    ll kol = k - (rst * 2);

                    ll rs = abs(i - x) + abs(j - y);

                    if (rs * 2 > kol) continue;

                    ll kl = kol / rs;

                    if (kl % 2) kl--;

                    sum += kl * dp[i][j][x][y];

                    sum -= kl * (ar[i][j] + ar[x][y]);

                    sum += (kl / 2) * ar[x][y];

                    sum += ((kl / 2) - 1) * ar[i][j];

                    kol -= kl * rs;

                    sum += mx[i][j][kol / 2];

                    ans = max(ans, sum);
                }
    cout << ans << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1920 KB Output is correct
2 Correct 6 ms 1920 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1792 KB Output is correct
2 Correct 9 ms 4736 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2816 KB Output is correct
2 Correct 5 ms 896 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 122 ms 63096 KB Output is correct
2 Correct 7 ms 3712 KB Output is correct
3 Runtime error 96 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 5120 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 69 ms 65536 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 105 ms 57724 KB Output is correct
2 Runtime error 67 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 15360 KB Output is correct
2 Correct 19 ms 14976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 62 ms 65540 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -