제출 #625718

#제출 시각아이디문제언어결과실행 시간메모리
625718d4xn메기 농장 (IOI22_fish)C++17
0 / 100
1083 ms8872 KiB
#include "fish.h" #include <bits/stdc++.h> using namespace std; //#define int long long #define ll long long #define vi vector<int> #define ii pair<int, int> #define vii vector<ii> const int N = 301, inf = INT_MAX; int n, m; int c[N][N]; bitset<N> vis[10][10]; ll dp[N][N][N]; // dp[i][j][k] = maximos peces que puedo conseguir // con las k primeras columnas donde // en la columna k+1 he subido i-1 // en la columna k+2 he subido j-1 ll mx(int curr, int h1, int h2) { if (curr == -1) return 0; if (vis[h1][h2][curr]) return dp[h1][h2][curr]; dp[h1][h2][curr] = 0; vis[h1][h2][curr] = 1; for (int h = 0; h < n+1; h++) { ll cnt = 0; // ver si pillo los de la derecha if (curr+1 < n) { for (int i = 0; i < h; i++) { if (h2-1 < i && h1-1 < i) cnt += c[i][curr+1]; } } // ver si pillo los de la izquierda if (curr-1 >= 0) { for (int i = 0; i < h; i++) { cnt += c[i][curr-1]; } } // ver si he eliminado alguno de los que he pillado for (int i = 0; i < min(h, h1); i++) { cnt -= c[i][curr]; } dp[h1][h2][curr] = max(dp[h1][h2][curr], cnt + mx(curr-1, h, h1)); } return dp[h1][h2][curr]; } long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y, std::vector<int> W) { for (int i = 0; i < N; i++) { memset(c[i], 0, sizeof(c[i])); } n = N; m = M; for (int i = 0; i < m; i++) { c[Y[i]][X[i]] = W[i]; } return mx(n-1, 0, 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...