제출 #1186586

#제출 시각아이디문제언어결과실행 시간메모리
1186586vitoNestabilnost (COI23_nestabilnost)C++17
0 / 100
1593 ms8516 KiB
#include <bits/stdc++.h> using namespace std; using ll=long long; #define F first #define S second #define sz(x) int(x.size()) const ll INF=1e18+5; int n; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; vector<int> a(n+1); for(int i=1; i<=n; i++) { cin >> a[i]; } vector<ll> f(n+1); for(int k=1; k<=n; k++) { cin >> f[k]; } for(int i=0; i<n-1; i++) { int x, y; cin >> x >> y; } vector<ll> suff(n+1); suff[n]=f[n]; for(int i=n-1; i>=1; i--) { suff[i]=min(suff[i+1], f[i]); } vector<ll> dp(n+1, INF); dp[0]=0; dp[1]=suff[a[1]+1]; for(int i=2; i<=n; i++) { dp[i]=dp[i-1]+suff[a[i]+1]; int mx=a[i]; int mora=n+5; for(int j=i-1; j>=1; j--) { if(a[j+1]<=a[j] && a[j+1]!=0) { break; } if(a[j]+1==a[j+1]) { if(a[j+1]>=mora) { break; } } else if(a[j+1]==0) { if(mora==n+5) { mora=a[j]+1; if(mora<=mx) { break; } } else { if(mora!=a[j]+1) { break; } } } else { break; } mx=max(mx, a[j]); if(mora==n+5) { dp[i]=dp[j-1]+suff[a[i]+1]; } else { dp[i]=dp[j-1]+f[mora]; } } } cout << dp[n] << '\n'; // for(int i=1; i<=n; i++) { // cout << dp[i] << '\n'; // } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...