日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【CodeForces - 987C 】Three displays (dp,最长上升子序列类问题,三元组问题)

發(fā)布時間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CodeForces - 987C 】Three displays (dp,最长上升子序列类问题,三元组问题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題干:

It is the middle of 2018 and Maria Stepanovna, who lives outside Krasnokamensk (a town in Zabaikalsky region), wants to rent three displays to highlight an important problem.

There are?nn?displays placed along a road, and the?ii-th of them can display a text with font size?sisi?only. Maria Stepanovna wants to rent such three displays with indices?i<j<ki<j<k?that the font size increases if you move along the road in a particular direction. Namely, the condition?si<sj<sksi<sj<sk?should be held.

The rent cost is for the?ii-th display is?cici. Please determine the smallest cost Maria Stepanovna should pay.

Input

The first line contains a single integer?nn?(3≤n≤30003≤n≤3000)?— the number of displays.

The second line contains?nn?integers?s1,s2,…,sns1,s2,…,sn?(1≤si≤1091≤si≤109)?— the font sizes on the displays in the order they stand along the road.

The third line contains?nn?integers?c1,c2,…,cnc1,c2,…,cn?(1≤ci≤1081≤ci≤108)?— the rent costs for each display.

Output

If there are no three displays that satisfy the criteria, print?-1. Otherwise print a single integer?— the minimum total rent cost of three displays with indices?i<j<ki<j<k?such that?si<sj<sksi<sj<sk.

Examples

Input

5 2 4 5 4 10 40 30 20 10 40

Output

90

Input

3 100 101 100 2 4 5

Output

-1

Input

10 1 2 3 4 5 6 7 8 9 10 10 13 11 14 15 12 13 13 18 13

Output

33

Note

In the first example you can, for example, choose displays?11,?44?and?55, because?s1<s4<s5s1<s4<s5?(2<4<102<4<10), and the rent cost is?40+10+40=9040+10+40=90.

In the second example you can't select a valid triple of indices, so the answer is?-1.

題目大意:

解題報告:

? ?三元組問題。

? ?類似最長上升子序列的做法,但是維護的不是長度,而是的最小值。

AC代碼:

#include<bits/stdc++.h> #define ll long long using namespace std; const int MAX = 3000 + 5; const ll INF = 0x3f3f3f3f3f3f3f3f; ll a[MAX]; ll b[MAX]; ll dp[MAX]; int main() {int n;ll ans = INF;cin>>n;for(int i = 1; i<=n; i++) {scanf("%lld",&a[i]);}for(int i = 1; i<=n; i++) {scanf("%lld",&b[i]);}memset(dp,INF, sizeof(dp));for(int i =2; i<=n-1; i++) {//其實不用到n,因為還要留一個給第三個display,所以這里遞歸到n-1.for(int j = 1; j<i; j++) {if(a[i] > a[j])dp[i] = min(dp[i], b[i] + b[j]);}} // printf("%lld\n",dp[3]);for(int i = 1; i<=n-1; i++) {for(int j = i+1; j<=n; j++) {if(a[j] > a[i])ans = min(ans ,dp[i]+b[j]); // printf("%lld %lld ==== %d %d\n",dp[i],b[j] ,i,j);}}if(ans == INF) printf("-1\n");else cout << ans<<endl;return 0 ; }

或者直接dp解:

詳見博客https://blog.csdn.net/xs18952904/article/details/80504296

?

20191003

忽然發(fā)現(xiàn)今天隨便刷codeforce的C題又刷到這道題了,特此更新:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define FF first #define SS second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; const int MAX = 2e5 + 5; ll dp1[MAX],dp2[MAX],a[MAX],c[MAX]; int n; int main() {cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i),dp1[i]=1e18;for(int i = 1; i<=n; i++) scanf("%lld",c+i),dp2[i]=1e18;for(int i = 1; i<=n; i++) {for(int j = 1; j<i; j++) {if(a[i] > a[j]) dp1[i] = min(dp1[i],c[j]+c[i]);}}for(int i = 1; i<=n; i++) {for(int j = 1; j<i; j++) {if(a[i] > a[j]) dp2[i] = min(dp2[i],dp1[j]+c[i]);}}ll ans = *min_element(dp2+1,dp2+n+1);if(ans == (ll)1e18) ans = -1;printf("%lld\n",ans);return 0 ; }

?

總結

以上是生活随笔為你收集整理的【CodeForces - 987C 】Three displays (dp,最长上升子序列类问题,三元组问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。