제출 #1285652

#제출 시각아이디문제언어결과실행 시간메모리
1285652Jawad_Akbar_JJCollecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
111 ms129452 KiB
#include <iostream> #include <algorithm> using namespace std; #define int long long const int N = 202; int x[N], t[N], dp[N][N][N][2]; signed main(){ int n, L; cin>>n>>L; for (int i=1;i<=n;i++) cin>>x[i]; for (int i=1;i<=n;i++) cin>>t[i]; x[n+1] = L; for (int i=0;i<=n+1;i++){ for (int j=0;j<=n+1;j++) for (int k=0;k<=n+1;k++) for (int l : {0, 1}) dp[i][j][k][l] = 1e17; } dp[0][0][n+1][0] = 0; for (int i=0;i<=n;i++){ for (int j=0;j<n;j++){ for (int k=n+1;k > j + 1;k--){ // currently at left side bool hit = t[j + 1] >= dp[i][j][k][0] + (x[j+1] - x[j]); dp[i+hit][j+1][k][0] = min(dp[i+hit][j+1][k][0], dp[i][j][k][0] + (x[j+1] - x[j])); hit = t[k - 1] >= dp[i][j][k][0] + x[j] + (L - x[k - 1]); dp[i+hit][j][k-1][1] = min(dp[i+hit][j][k-1][1], dp[i][j][k][0] + x[j] + (L - x[k-1])); // currently at right side hit = t[k - 1] >= dp[i][j][k][1] + x[k] - x[k-1]; dp[i+hit][j][k-1][1] = min(dp[i+hit][j][k-1][1], dp[i][j][k][1] + x[k] - x[k-1]); hit = t[j+1] >= dp[i][j][k][1] + L - x[k] + x[j+1]; dp[i+hit][j+1][k][0] = min(dp[i+hit][j+1][k][0], dp[i][j][k][1] + L - x[k] + x[j + 1]); } } } for (int i=n;i>=0;i--){ for (int j=0;j<=n;j++) for (int k=n+1;k >= j + 1;k--) for (int l : {0, 1}) if (dp[i][j][k][l] != 1e17) return cout<<i<<endl, 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...