Submission #1199430

#TimeUsernameProblemLanguageResultExecution timeMemory
1199430Saul0906Semiexpress (JOI17_semiexpress)C++20
48 / 100
150 ms327680 KiB
#include <bits/stdc++.h> #define fi first #define se second #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define rep(a,b,c) for(int a=b; a<c; a++) #define repr(a,b,c) for(int a=b-1; a>c-1; a--) #define repa(a,b) for(auto a:b) #define mid ((l+r)>>1) #define endl "\n" using namespace std; using vi = vector<int>; const int N=305; int dp[N][N][N]{}; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n, m, k, a, b, c, t; cin>>n>>m>>k>>a>>b>>c>>t; vi p(m); bool ex[n+1]{}; ll lst[n+1]{}, dis[n+1]{}; rep(i,0,m) cin>>p[i], ex[p[i]]=true; rep(i,1,n+1){ if(ex[i]) lst[i]=i; else lst[i]=lst[i-1]; dis[i]=(lst[i]-1)*b+(i-lst[i])*c; } rep(i,0,n+1) rep(j,0,n+1) rep(k,0,n+1) dp[i][j][k]=-N; dp[0][0][0]=0; rep(i,1,n+1){ //iterate all stations rep(j,0,n+1){ //iterate the number of fixed stations rep(k,0,n+1){ //the last fixed station if(ex[i]){ dp[i][j+1][i]=max(dp[i-1][j][k]+(dis[i]<=t),dp[i][j+1][i]); }else{ dp[i][j+1][i]=max(dp[i-1][j][k]+(dis[i]<=t),dp[i][j+1][i]); dp[i][j][k]=max(dp[i-1][j][k]+(dis[k]+(i-k)*a<=t),dp[i][j][k]); } } } } int ans=0; rep(i,0,n+1) ans=max(ans,dp[n][k][i]); cout<<ans-1<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...