Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long
- #define INF 300000000000
- #define EPS 0.000000001
- #define f first
- #define s second
- using namespace std;
- ll n;
- ll dp[3002][4];
- ll srr[3002];
- ll crr[3002];
- ll solve(ll ind, ll x,ll num){
- if(x>=3){
- return 0;
- }
- if(ind>=n){
- return INF;
- }
- // cout<<ind<<" "<<x<<" "<<num<<endl;
- // cout<<"DFD"<<endl;
- if(dp[ind][x]!=-1)
- return dp[ind][x];
- ll A=INF,B=INF;
- if(srr[ind]>num){
- A=solve(ind+1,x+1,srr[ind])+crr[ind];
- }
- B=solve(ind+1,x,num);
- dp[ind][x]=min(A,B);
- // cout<<ind<<" "<<x<<endl;
- // cout<<"ans "<<A<<" "<<B<<" "<<dp[ind][x]<<endl;
- return dp[ind][x];
- }
- int main(){
- cin>>n;
- for(ll i=0;i<n;i++)
- cin>>srr[i];
- for(ll i=0;i<n;i++)
- cin>>crr[i];
- for(ll i=0;i<3002;i++)
- for(ll j=0;j<4;j++)
- dp[i][j]=-1;
- ll ans=solve(0,0,-1);
- // for(ll i=0;i<n;i++){
- // for(ll j=0;j<3;j++){
- // cout<<dp[i][j]<<" ";
- // }
- // cout<<endl;
- // }
- if(ans==INF)
- cout<<-1<<endl;
- else
- cout<<ans<<endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment