题意翻译

题目大意:

nnn个位置,每个位置有两个属性s,cs,cs,c,要求选择3个位置i,j,ki,j,ki,j,k,使得si<sj<sks_i<s_j<s_ksi​<sj​<sk​,并使得ci+cj+ckc_i+c_j+c_kci​+cj​+ck​最小

输入格式:

一行一个整数,nnn,3<=n<=30003<=n<=30003<=n<=3000

一行nnn个整数,即sss

再一行nnn个整数,即ccc

输出格式:

输出一个整数,即最小的c_i+c_j+c_k

枚举 j ,分段暴力;

O(N^2);

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 900005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {
ll x = 0;
char c = getchar();
bool f = false;
while (!isdigit(c)) {
if (c == '-') f = true;
c = getchar();
}
while (isdigit(c)) {
x = (x << 1) + (x << 3) + (c ^ 48);
c = getchar();
}
return f ? -x : x;
} ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; } /*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1; y = 0; return a;
}
ans = exgcd(b, a%b, x, y);
ll t = x; x = y; y = t - a / b * y;
return ans;
}
*/ int n;
ll s[3006];
ll c[3006];
ll minn1[4000];
ll minn2[4000]; int main() {
//ios::sync_with_stdio(0);
rdint(n);
for (int i = 1; i <= n; i++)rdllt(s[i]);
for (int i = 1; i <= n; i++)rdllt(c[i]);
ll ans = inf;
c[0] = c[n + 1] = inf;
for (int i = 2; i < n; i++) {
int l = 0, r = n + 1;
for (int j = 1; j < i; j++) {
if (s[j] < s[i])
if (c[j] < c[l])l = j;
}
for (int j = i + 1; j <= n; j++) {
if (s[j] > s[i])
if (c[j] < c[r])r = j;
}
if (l != 0 && r != n + 1)ans = min(ans, c[i] + c[l] + c[r]);
}
if (ans == inf)cout << -1 << endl;
else cout << ans << endl;
return 0;
}

最新文章

  1. css知多少(6)——选择器的优先级
  2. UWP开发随笔——UWP新控件!AutoSuggestBox!
  3. postgresql数据类型转换
  4. windows 8 项目
  5. location.orgin
  6. http://www.jobui.com/mianshiti/it/java/6782/
  7. android中的category静态值(转)
  8. 111_leetcode_Best Time to Buy and Sell Stock III
  9. Sql Server数据库快照初探
  10. redis3--key的操作
  11. CSS实现背景透明而背景上的文字图片不透明
  12. 百度富文本编辑器Ueditor使用
  13. 原创分享!SharePoint母版页修改(实战)
  14. 141. 环形链表 [JS Undefined类型的运用]
  15. [MySQL]group by 与 if 的统计技巧
  16. Linux下清理内存和Cache方法
  17. 使用 Unity 3D 开发游戏的架构设计难点
  18. js函数内未声明变量
  19. JavaScript实现页面显示倒计时功能
  20. [Python]Python 函数调用小例子

热门文章

  1. windows下面的python的MySQLdb环境安装
  2. Statement
  3. Azure blob Storage Snapshot
  4. ssh配置免登 Ubuntu环境
  5. PG peered实验
  6. [.net] 无法创建虚拟目录。已将URL“XXX”映射到IIS Express网站上的一个不同的文件夹
  7. 浏览器怎么禁用和开启Javascript
  8. 常见的CSS和HTML面试题
  9. vue.js 使用高德地图
  10. 面试题: redis面试题 有用 redis详细