제출 #856643

#제출 시각아이디문제언어결과실행 시간메모리
8566438pete8Collecting Stamps 3 (JOI20_ho_t3)C++14
15 / 100
132 ms261656 KiB
#include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include<cmath> #include<set> #include<algorithm> #include<bitset> //#include "combo.h" using namespace std; #define ll long long #define f first #define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define pb push_back #define p push #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #define int long long using namespace std; const int inf=1e18; int dp[202][202][202][2],n,m; int memo[202][202]; //at l r taken ,min time int caldist(int u,int v){ //dist u->v; if(u>v)swap(v,u); if(memo[u][v]!=-1)return memo[u][v]; return memo[u][v]=min((v-u),m-v+u); } int32_t main(){ cin>>n>>m; n++; vector<pii>v(n); v[0].f=0,v[0].s=0; for(int i=1;i<n;i++)cin>>v[i].f; for(int i=1;i<n;i++)cin>>v[i].s; for(int i=0;i<=200;i++)for(int j=0;j<=200;j++){ memo[i][j]=-1; for(int k=0;k<=200;k++)dp[i][j][k][0]=dp[i][j][k][1]=inf; } dp[0][0][0][0]=dp[0][0][0][1]=0; for(int sz=0;sz<n-1;sz++){ int l,r=0,nr,nl; l=(n-sz)%n; bool yes=true; while(yes){ if(l==0)yes=false; nr=(r+1)%n; nl=(l-1+n)%n; for(int t=0;t<=n;t++){ if(dp[l][r][t][0]+caldist(v[nr].f,v[l].f)<=v[nr].s)dp[l][nr][t+1][1]=min(dp[l][nr][t+1][1],dp[l][r][t][0]+caldist(v[nr].f,v[l].f)); else dp[l][nr][t][1]=min(dp[l][nr][t][1],dp[l][r][t][0]+caldist(v[nr].f,v[l].f));//l to nr if(dp[l][r][t][0]+caldist(v[l].f,v[nl].f)<=v[nl].s)dp[nl][r][t+1][0]=min(dp[nl][r][t+1][0],dp[l][r][t][0]+caldist(v[l].f,v[nl].f)); else dp[nl][r][t][0]=min(dp[nl][r][t][0],dp[l][r][t][0]+caldist(v[l].f,v[nl].f)); if(dp[l][r][t][1]+caldist(v[r].f,v[nl].f)<=v[nl].s)dp[nl][r][t+1][0]=min(dp[nl][r][t+1][0],dp[l][r][t][1]+caldist(v[r].f,v[nl].f)); else dp[nl][r][t][0]=min(dp[nl][r][t][0],dp[l][r][t][1]+caldist(v[r].f,v[nl].f)); if(dp[l][r][t][1]+caldist(v[nr].f,v[r].f)<=v[nr].s)dp[l][nr][t+1][1]=min(dp[l][nr][t+1][1],dp[l][r][t][1]+caldist(v[nr].f,v[r].f)); else dp[l][nr][t][1]=min(dp[l][nr][t][1],dp[l][r][t][1]+caldist(v[nr].f,v[r].f)); } r=nr; l=(l+1)%n; } } int ans=0; for(int i=0;i<=200;i++)for(int j=0;j<=200;j++)for(int k=0;k<=200;k++)for(int g=0;g<2;g++)if(dp[i][j][k][g]<inf)ans=max(ans,k); cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...