Mountains

题面

题意:

   选最多的点使得两两看不见。

分析:

  分治,solve(l,r)为区间[l,r]的答案。那么如果不选最高点,分治两边即可,选了最高点,那么在最高点看不见的区间里分治。

代码:

 #include"mountains.h"
#include<bits/stdc++.h>
using namespace std; const int N = ;
int y[N];
int f[N][N]; bool Judge(int a,int b,int c) { // a see c ?
// ((y[a] - y[b]) / (a - b)) > ((y[a] - y[c]) / (a - c));
return 1ll * (y[a] - y[b]) * (a - c) > 1ll * (y[a] - y[c]) * (a - b);
} int solve(int l,int r) {
if (f[l][r]) return f[l][r];
if (l > r) return ;
if (l == r) return ;
int pos = -, mx = -;
for (int i=l; i<=r; ++i) if (y[i] > mx) pos = i, mx = y[i];
int ans1 = solve(l, pos - ) + solve(pos + , r); // select max_height_node int ans2 = ; // don't select this node
for (int i=pos-,j; i>=l; i=j) {
for (j=i-; j>=l; --j) { // i can see pos
if (Judge(j, i, pos)) { // j can't see pos
if (j == l) ans2 += solve(l, i - );
continue;
}
if (j + <= i - ) ans2 += solve(j + , i - ); // this Section can't see pos
break;
}
}
for (int i=pos+,j; i<=r; i=j) {
for (j=i+; j<=r; ++j) {
if (Judge(pos, i, j)) {
if (j == r) ans2 += solve(i + , r);
continue;
}
if (i + <= j - ) ans2 += solve(i + , j - );
break;
}
}
return f[l][r] = max(ans1, ans2 + );
} int maximum_deevs(vector<int> A) {
int n = A.size();
for (int i=; i<=n; ++i) y[i] = A[i - ];
return solve(, n);
}

IOI 2017 Practice Contest mountains的更多相关文章

  1. ACM ICPC 2017 Warmup Contest 9 I

    I. Older Brother Your older brother is an amateur mathematician with lots of experience. However, hi ...

  2. ACM ICPC 2017 Warmup Contest 9 L

    L. Sticky Situation While on summer camp, you are playing a game of hide-and-seek in the forest. You ...

  3. Fighting For 2017 Season Contest 1

    比赛地址[https://vjudge.net/contest/147011#problem/A].960626 题目一:[http://codeforces.com/problemset/probl ...

  4. JAG Practice Contest for ACM-ICPC Asia Regional 2016

    2016弱校联盟十一专场10.3 传送门 B. Help the Princess! 计算皇后和士兵谁先到达出口即可. C. We don't wanna work! 两个优先队列维护工作中积极性最小 ...

  5. JAG Practice Contest for ACM-ICPC Asia Regional 2016.K.Non-redundant Drive(点分治)

    Atcoder vjudge 这标题好长... \(Description\) 给定一棵\(n\)个点的树.在每个点\(i\)你可以补充\(g_i\)的油量,经过一条边需要花费边长的油量.你可以选择从 ...

  6. JAG Practice Contest for ACM-ICPC Asia Regional 2016 C题【贪心】

    camp给出的题解: 题解:贪心,先算出最小需要的长度.然后从左到右依次确定每一位.复杂度O(n)O(n) 长度为 2n2n 的串可以构造出需要 [0,1+3+...+2n-1][0,1+3+...+ ...

  7. JAG Practice Contest for ACM-ICPC Asia Regional 2016B题【BFS】

    题意: 就是公主要逃跑,士兵要抓公主,问你能不能逃跑哇: 思路: 就是终点搞成起点,然后BFS一下就好了,最后枚举一下出口到公主的距离是不是<所有的到士兵的距离: #include <bi ...

  8. 非传统题初探——AtCoder Practice Contest #B - インタラクティブ練習 (Interactive Sorting)

    原题: Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement This is an interac ...

  9. ACM ICPC 2017 Warmup Contest 1 D

    Daydreaming Stockbroker Gina Reed, the famous stockbroker, is having a slow day at work, and between ...

随机推荐

  1. IE11,Chrome65,Firefox58 的webdriver驱动下载,调用浏览器打开网址

    一.环境及需求 1.1环境 Windows10 + Python 3.6.4 + selenium 3.141 1.2需求 工作需要实现一个网页自动登录的操作,决定使用selenium+python实 ...

  2. 【绝迹篇】C#RSA算法实现

    当下最流行的RSA加密算法,只有公钥和私钥同时拥有才能破解加密信息,RSA加密算法的出现有利于数据安全性传输 1.C#中自带RSACryptoServiceProvider类可以让你很好的生成XML格 ...

  3. 移动端meta标签的设置

    var phoneWidth = parseInt(window.screen.width); var phoneScale = phoneWidth / 640; var ua = navigato ...

  4. js判断值是不是全是数字

    if(isNaN(value)){ 不是数字 }else{ 全是数字 }

  5. Haroopad 中文不显示

    https://blog.csdn.net/zgf19930504/article/details/51508111 1. 选择文件--> 偏好设置 2. 选择 编辑器--> 编辑--&g ...

  6. [HTML]在页面中输出空格的几种方式

    JS中如何输出空格 在写JS代码的时候,大家可以会发现这样现象: document.write("   1      2                3  "); 结果: 1 2 ...

  7. iOS开发神器InjectionIII

    最近发现了一款适用于iOS开发的神器,希望可以和大家一起分享,同时自己也将有用的东西记录下来,没错就是InjectionIII! 先看一下使用流程: 1.在MAC的App Store里面搜索下载这个工 ...

  8. vue+element-ui中的图片获取与上传

    vue+element-ui中的图片获取与上传 工作上接触了一下图片的处理,图片的格式是文件流, 记录如下. 请求图片 请求图片的时候,带上{ responseType: 'blob' }, 否则图片 ...

  9. JavaScript小练习2-网页换肤

    题目 分析 三个皮肤切换按钮的选择 用li即可. 点击显示白点 li中嵌套一个li,onclick时改变子元素li的css onload 当页面加载完成后立即执行一段JavaScript代码. onl ...

  10. 【TOJ 3600】Fibonacci II (对数+斐波那契通项式)

    描述 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i> ...