제출 #1291234

#제출 시각아이디문제언어결과실행 시간메모리
1291234haha건물 4 (JOI20_building4)C++20
0 / 100
124 ms252220 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 2005; string dp[MAXN][MAXN][2]; int a[MAXN], b[MAXN]; int n; string INF = string(5000, 'Z'); int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for(int i = 1; i <= 2*n; i++) cin >> a[i]; for(int i = 1; i <= 2*n; i++) cin >> b[i]; for(int i = 0; i <= n; i++) for(int j = 0; j <= n; j++) dp[i][j][0] = dp[i][j][1] = INF; dp[1][0][0] = "A"; dp[0][1][1] = "B"; for(int i = 2; i <= 2*n; i++){ for(int j = 0; j <= min(i,n); j++){ int k = i-j; if(k<0 || k>n) continue; // take A if(j>0){ if(dp[j-1][k][0] != INF && a[i]>=a[i-1]) dp[j][k][0] = min(dp[j][k][0], dp[j-1][k][0]+"A"); if(dp[j-1][k][1] != INF && a[i]>=b[i-1]) dp[j][k][0] = min(dp[j][k][0], dp[j-1][k][1]+"A"); } // take B if(k>0){ if(dp[j][k-1][1] != INF && b[i]>=b[i-1]) dp[j][k][1] = min(dp[j][k][1], dp[j][k-1][1]+"B"); if(dp[j][k-1][0] != INF && b[i]>=a[i-1]) dp[j][k][1] = min(dp[j][k][1], dp[j][k-1][0]+"B"); } } } string ans = min(dp[n][n][0], dp[n][n][1]); if(ans==INF) cout << -1; else cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...