Yinchuan-B The Great Wall
yinchuan-B The Great Wall
给出n个数,将其划分为k个区间,要求每个区间当中的最大数和最小数的差值之和最大。求k从1到n的答案。
n <= 1e4
因为这个题开始学四边形优化,其实会了之和回头看感觉还是蛮简单的,w(i,j)w(i,j)w(i,j)的四边形不等式很好证明,然后用个ST表来实现O(1)O(1)O(1)的查询,1e8的空间还是有点大,所以学着写了滚动数组。
这个代码是按照印象中的题意随便糊的,就过了一下样例,没有在oj上进行测试。
const int N = 10010, inf = 1e9;
int m[N][2], dp[N][2], STmin[N][20], STmax[N][20], lg2[N];void init(int len)
{for (int k = 1; (1 << k) < len; k ++)for (int i = 1; i + (1 << k) - 1 <= len; i ++){STmin[i][k] = min(STmin[i][k - 1], STmin[i + (1 << (k - 1))][k - 1]);STmax[i][k] = max(STmax[i][k - 1], STmax[i + (1 << (k - 1))][k - 1]);}for (int i = 2; i <= len; i ++)lg2[i] = lg2[i >> 1] + 1;return;
}inline int w(int l, int r)
{int len = r - l + 1;int mx = max(STmax[l][lg2[len]], STmax[r - (1 << lg2[len]) + 1][lg2[len]]);int mn = min(STmin[l][lg2[len]], STmin[r - (1 << lg2[len]) + 1][lg2[len]]);return mx - mn;
}int main()
{int T = 1;//T = read();while (T --){int n;n = read();for (int i = 1; i <= n; i ++){STmin[i][0] = read();STmax[i][0] = STmin[i][0];}init(n);int now = 0;for (int i = 1; i <= n; i ++)dp[i][now] = w(1, i);printf ("%d\n", dp[n][now]);for (int j = 2; j <= n; j ++){now ^= 1;m[n + 1][now] = n;for (int i = n; i >= 1; i --){int mx = -inf, p;for (int k = max(m[i][now ^ 1], j - 1); k <= min(m[i + 1][now], i - 1); k ++){if (mx < dp[k][now ^ 1] + w(k + 1, i)){mx = dp[k][now ^ 1] + w(k + 1, i);p = k;}}dp[i][now] = mx;m[i][now] = p;}printf ("%d\n", dp[n][now]);}}return 0;
}`
Yinchuan-B The Great Wall相关推荐
- Java解惑 电子书
--表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...
- The 2020 ICPC Asia Yinchuan Regional Programming Contest 银川 B. The Great Wall 题解
题目链接:Problem - B - Codeforces input1: 5 1 2 3 4 5 output1: 4 3 2 1 0 input2: 5 1 2 1 2 1 output2: 1 ...
- 【POJ1113】Wall(凸包)
[题目] Description Once upon a time there was a greedy King who ordered his chief Architect to build a ...
- gcc 常用命令-Wall
-Wall GCC还有一些其它编译选项也能够产生有用的警告信息.这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能够使GCC产生尽可能多的警告信息. 转载于:https://www.cn ...
- ZOJ 2747 Paint the Wall(离散化+暴力)题解
题意:给你一个面,然后涂颜色,问你最后剩多少颜色,每种颜色面积. 思路:第一反应是二维线段树,代码又臭又长,可以做.但是这题暴力+离散化就可以过.可以看到他给的n只有100,也就是说最坏情况下会涂10 ...
- linux上给其他在线用户发送信息(wall, write, talk, mesg)
linux上给其他在线用户发送信息(wall, write, talk, mesg) 2018-01-05 lonskyMR 转自 恶之一眉 修改 微信分享: 设置登录提示 /etc/motd文件的用 ...
- 终端读写命令 -- read write wall
我们在使用 C 语言时,如果使用文件操作,不可避免的会使用 read write 命令.当然,Shell 中也是存在 read 和 write 的,不过,它们的作用不是对文件进行操作,而是多其他的终端 ...
- makefile使用--Wall选项(二)
-Wall:选项可以打印出编译时所有的错误或者警告信息.这个选项很容易被遗忘,编译的时候,没有错误或者警告提示,以为自己的程序很完美,其实,里面有可能隐藏着许多陷阱.变量没有初始化,类型不匹配,或者类 ...
- [IOI2014]Wall
[IOI2014]Wall 题目大意: 给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\).\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i ...
- [转][Timer学习]wall time和monotonic time
在一些系统调用中需要指定时间是用CLOCK_MONOTONIC还是CLOCK_REALTIME,以前总是搞不太清楚它们之间的差别,现在终于有所理解了. CLOCK_MONOTONIC是monotoni ...
最新文章
- 2!=5 or 0在python中是否正确-python中的if判断语句
- Python操作Rabbit MQ的5种模式
- 分页存储管理和分段存储管理
- MSSQL2000 数据库文件迁移到 MSSQL2005 可能要用的一些命令
- CF809C(找规律+数位DP)
- 217. Contains Duplicate
- python求矩阵的秩_Python 实现线性代数计算器
- 4-2 ADO.NET-查询和检索数据1
- 页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记
- 推荐算法实现java_利用Java写开源库 覆盖70多种推荐算法
- Python Flask Web 第十课 —— flask-wtf
- Django 国际化和本地化
- 微波雷达感应模块技术,实时智能检测人体存在,静止微小动静感知
- 如何查找论文是否被SCI,EI检索
- 淘客部分功能实现源码
- Ubuntu安装搜 狗输入法,最完整的步骤
- CryEngine3 调试Shader方法
- LPC1768PWM实验
- App首屏接口性能优化
- 河海大学计算机科学与技术考研,2021年河海大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...