제출 #1286055

#제출 시각아이디문제언어결과실행 시간메모리
1286055Faisal_SaqibCollecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
229 ms135368 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=210; ll x[N],t[N],dp[N][N][N][2]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n,l; cin>>n>>l; x[0]=0; x[n+1]=l; for(int i=1;i<=n;i++) { cin>>x[i]; } for(int i=1;i<=n;i++) { cin>>t[i]; } 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 p=0;p<2;p++) { dp[i][j][k][p]=1e18; } } } } dp[0][n+1][0][0]=0; dp[0][n+1][0][1]=0; for(int k=0;k<=n+1;k++) { for(int i=0;i<=n+1;i++) { for(int j=n+1;j>=0;j--) { for(int tl=0;tl<2;tl++) { // 0 ll tm=dp[i][j][k][0]; if((i+1)<j) { dp[i+1][j][k][0]=min(dp[i+1][j][k][0],tm+x[i+1]-x[i]); if((tm+x[i+1]-x[i])<=t[i+1]) { dp[i+1][j][k+1][0]=min(dp[i+1][j][1+k][0],tm+x[i+1]-x[i]); } } // i] j-1 [j if((j-1)>i) { ll dt=l-x[j-1]+x[i]; dp[i][j-1][k][1]=min(dp[i][j-1][k][1],tm+dt); if((tm+dt)<=t[j-1]) { dp[i][j-1][k+1][1]=min(dp[i][j-1][k+1][1],tm+dt); } } tm=dp[i][j][k][1]; if((j-1)>i) { dp[i][j-1][k][1]=min(dp[i][j-1][k][1],tm+(x[j]-x[j-1])); if((tm+(x[j]-x[j-1]))<=t[j-1]) { dp[i][j-1][k+1][1]=min(dp[i][j-1][k+1][1],tm+(x[j]-x[j-1])); } } if((i+1)<j) { ll dt=l-x[j]+x[i+1]; dp[i+1][j][k][0]=min(dp[i+1][j][k][0],tm+dt); if((tm+dt)<=t[i+1]) { dp[i+1][j][k+1][0]=min(dp[i+1][j][k+1][0],tm+dt); } } } } } } for(int k=n;k>=0;k--) { for(int i=0;i<=(n+1);i++) { for(int j=n+1;j>=0;j--) { for(int p=0;p<2;p++) { if(dp[i][j][k][p]<1e18) { // cout<<i<<' '<<j<<' '<<k<<' '<<p<<' '<<dp[i][j][k][p]<<endl;; cout<<k<<endl; return 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...