Submission #1185924

#TimeUsernameProblemLanguageResultExecution timeMemory
1185924vitosevskiNestabilnost (COI23_nestabilnost)C++20
12 / 100
1595 ms8520 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]=min(dp[i], dp[j-1]+suff[a[i]+1]);
			}
			else {
				dp[i]=min(dp[i], dp[j-1]+f[mora]);
			}
		}
	}
	cout << dp[n] << '\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...