Submission #524599

#TimeUsernameProblemLanguageResultExecution timeMemory
524599mosiashvililukaCollecting Stamps 3 (JOI20_ho_t3)C++14
100 / 100
90 ms135940 KiB
#include<bits/stdc++.h>
using namespace std;
const long long N=1000000009LL;
long long a,b,c,d,e,i,j,ii,jj,zx,xc,L,dp[209][209][209][2],k,pas;
pair <long long, long long> p[209];
int main(){
	ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>a>>L;
	for(i=1; i<=a; i++){
		cin>>p[i].first;
	}
	for(i=1; i<=a; i++){
		cin>>p[i].second;
	}
	for(i=0; i<=a+2; i++){
		for(j=0; j<=a+2; j++){
			for(ii=0; ii<=a+2; ii++){
				dp[i][j][ii][0]=dp[i][j][ii][1]=N;
			}
		}
	}
	dp[a+1][0][0][0]=dp[a+1][0][0][1]=0;
	p[a+1].first=L;
	for(ii=1; ii<=a; ii++){
		for(j=0; j<=ii; j++){
			i=ii-j;i=a+1-i;
			for(k=0; k<=ii; k++){
				if(j!=0){
					dp[i][j][k][1]=min(dp[i][j][k][1],dp[i][j-1][k][1]+p[j].first-p[j-1].first);
					if(k>0&&dp[i][j-1][k-1][1]+p[j].first-p[j-1].first<=p[j].second){
						dp[i][j][k][1]=min(dp[i][j][k][1],dp[i][j-1][k-1][1]+p[j].first-p[j-1].first);
					}
					zx=p[j].first+L-p[i].first;
					dp[i][j][k][1]=min(dp[i][j][k][1],dp[i][j-1][k][0]+zx);
					if(k>0&&dp[i][j-1][k-1][0]+zx<=p[j].second){
						dp[i][j][k][1]=min(dp[i][j][k][1],dp[i][j-1][k-1][0]+zx);
					}
				}
				if(i!=a+1){
					dp[i][j][k][0]=min(dp[i][j][k][0],dp[i+1][j][k][0]+p[i+1].first-p[i].first);
					if(k>0&&dp[i+1][j][k-1][0]+p[i+1].first-p[i].first<=p[i].second){
						dp[i][j][k][0]=min(dp[i][j][k][0],dp[i+1][j][k-1][0]+p[i+1].first-p[i].first);
					}
					zx=L-p[i].first+p[j].first;
					dp[i][j][k][0]=min(dp[i][j][k][0],dp[i+1][j][k][1]+zx);
					if(k>0&&dp[i+1][j][k-1][1]+zx<=p[i].second){
						dp[i][j][k][0]=min(dp[i][j][k][0],dp[i+1][j][k-1][1]+zx);
					}
				}
			}
		}
	}
	for(i=0; i<=a+1; i++){
		for(j=0; j<=a+1; j++){
			for(ii=0; ii<=a+1; ii++){
				if(dp[i][j][ii][0]!=N){
					pas=max(pas,ii);
				}
				if(dp[i][j][ii][1]!=N){
					pas=max(pas,ii);
				}
			}
		}
	}
	cout<<pas;
	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...