C. Three displays(简单dp)

网友投稿 266 2022-08-28

C. Three displays(简单dp)

C. Three displays

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

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

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

Examples

Copy

5 2 4 5 4 10 40 30 20 10 40

Copy

90

Copy

3 100 101 100 2 4 5

Copy

-1

Copy

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

Copy

33

题目大概:

给出n个数,每个数都有价值。找出价值最小的三元组序列,满足数 i

思路:

dp一下。

dp【i】【j】是以i结尾的 j 元组的最小价值。然后状态转移一下就行了。

dp【i】【2】=min(dp【i】【2】,dp【k】【1】+w【i】)(1<=k

dp【i】【3】=min(dp【i】【3】,dp【k】【2】+w【i】)(1<=k

代码:

#include using namespace std;const int maxn=3100;const int INF=0x3f3f3f3f;int a[maxn],w[maxn];int dp[maxn][4];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=n;i++) { scanf("%d",&w[i]); dp[i][1]=w[i]; } for(int i=1;i<=n;i++) { dp[i][2]=INF; dp[i][3]=INF; for(int j=1;ja[j]) { dp[i][2]=min(dp[j][1]+w[i],dp[i][2]); dp[i][3]=min(dp[j][2]+w[i],dp[i][3]); } } } int sum=INF; for(int i=3;i<=n;i++) { if(dp[i][3]==INF)continue; sum=min(sum,dp[i][3]); } if(sum==INF)printf("-1\n"); else printf("%d\n",sum); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Educational Codeforces Round 35 (Rated for Div. 2) A B C D
下一篇:中国营销的逻辑和未来!(中国营销思考)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~