【经典dp 技巧】8.13序列
经典的拆绝对值
题目大意
给定$n$个具有顺序的序列,允许对每个序列循环移动。记第$i$个序列尾元素为$x$,$i+1$个序列首元素为$y$,定义其连接收益为$|x-y|*i$,求$n$个序列连接最大收益。
$\sum n \le 10^6$
题目分析
经典dp做得少
考虑如何处理绝对值:绝对值按分类讨论分开无非就两种情况$x*i-y*i$或者$y*i-x*i$,并且两者异号,相当于转为$\max$的问题。
因而不需要管两个元素的相对大小,只需要记录元素$a_v$的$\max\{f_{a_v}-a_v*i\}$和$\max\{f_{a_v}+a_v*i\}$.转移时候两者分开。
意会一下就是如下图
- #include<bits/stdc++.h>
- typedef long long ll;
- const ll INF = 1ll<<;
- const int maxn = ;
- int T,n,len[maxn],id[maxn];
- ll f[maxn],ans,pre,suf;
- std::vector<int> a[maxn];
- int read()
- {
- char ch = getchar();
- int num = , fl = ;
- for (; !isdigit(ch); ch=getchar())
- if (ch=='-') fl = -;
- for (; isdigit(ch); ch=getchar())
- num = (num<<)+(num<<)+ch-;
- return num*fl;
- }
- int main()
- {
- for (T=read(); T; --T)
- {
- n = read(), id[] = ;
- for (int i=; i<=n; i++)
- {
- a[i].clear(), len[i] = read(), id[i] = id[i-]+len[i-];
- for (int j=; j<=len[i]; j++)
- a[i].push_back(read());
- }
- ans = pre = suf = ;
- for (int i=; i<=n; i++)
- {
- ll nxtp = -INF, nxts = , val = ;
- for (int j=,mx=a[i].size(),lst; j<mx; j++)
- {
- lst = j?(j-):a[i].size()-;
- val = std::max(pre+1ll*a[i][j]*(i-), suf-1ll*a[i][j]*(i-));
- ans = std::max(ans, val);
- nxtp = std::max(nxtp, val-1ll*a[i][lst]*i);
- nxts = std::max(nxts, val+1ll*a[i][lst]*i);
- }
- pre = nxtp, suf = nxts;
- }
- printf("%lld\n",ans);
- }
- return ;
- }
END
【经典dp 技巧】8.13序列的更多相关文章
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- NYOJ - 矩形嵌套(经典dp)
矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...
- [文文殿下]基本的DP技巧
. 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩 ...
- poj1458 求最长公共子序列 经典DP
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45763 Accepted: 18 ...
- P1091 合唱队形 DP 最长升序列维护
题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...
- 51nod 1412 AVL树的种类(经典dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 题意: 思路: 经典dp!!!可惜我想不到!! $dp[i][k] ...
- NYOJ 16 矩形嵌套(经典DP)
http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度: ...
- poj 1050 To the Max 最大子矩阵和 经典dp
To the Max Description Given a two-dimensional array of positive and negative integers, a sub-rect ...
- CS Academy Distinct Neighbours(经典dp)
CS Academy Distinct Neighbours(经典dp) 题意: 求相邻无相同数字的合法的排列数 题解: 题解 先将相同的数字分为一类,假设共有n组 定义\(dp[i][j]\)表示前 ...
随机推荐
- 如何使用thymeleaf显示控制传递过来的数据
实例 <p th:text="'Hello, ' + ${name} + '!'" /> name为要显示的参数名
- Kubernetes---Pod hook
Pod hook(钩子)是由Kubernetes管理的kubelet发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中.可以同时为Pod中的所有容器都配置 hook ...
- J.U.C之AQS介绍
从JDK1.5开始,引入了并发包java.util.concurrent(J.U.C),并发容器里的同步容器AQS(AbstractQueuedSynchronizer)是J.U.C的核心,AQS底层 ...
- Python 运算符与数据类型
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- 怎样快捷获取元素节点body
1. 使用: document.body document.body.nodeName; // "BODY" 2. 使用: document.getElementsByTagNam ...
- 怎样获取不同环境下的document对象
1. 在一般的网页文档中, 可通过: document 或 window.document 获取; 2. 在iframe框架中, 可通过iframe节点的属性: contentDocument 获取; ...
- Python 字符串——巧取值和列表——巧取值 对比
Python 字符串——巧取值和列表——巧取值 对比 1.字符串取值实例: samp_string = "Whatever you are, be a good one." for ...
- promise, async和await
最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...
- 【原创】大叔经验分享(80)openresty(nginx+lua)发邮件
nginx配置 lua_package_path "/usr/local/openresty/lualib/resty/smtp/?.lua;;"; lua_need_reques ...
- 启动tomcat提示某个端口被占用
原文参见:https://www.cnblogs.com/liuyanxia/p/6755520.html 解决办法 找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口 ...