经典的拆绝对值

题目大意

给定$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

最新文章

  1. 聊天室(Java实现)
  2. 计算机病毒实践汇总六:IDA Pro基础
  3. nyoj221_Tree_subsequent_traversal
  4. cf378C(模拟)
  5. Sea.js学习1——初识Sea.js
  6. mybatis的jdbcType类型
  7. 基础面试题——Javascript
  8. 【转】缓存淘汰算法系列之3——FIFO类
  9. Myeclipse2014 已有项目更换JDK
  10. important覆盖行内样式
  11. 广州.NET微软技术俱乐部微信群各位技术大牛的blog
  12. 分布式拒绝服务攻击(DDoS:Distributed Denial of Service)
  13. JavaScript使用注意事项
  14. seaweedFS
  15. window10 显示QQ图标
  16. 关hashMap跟hashTable的区别
  17. ThreadPoolTaskExecutor多线程使用,及线程池配置
  18. CentOS7.3 搭建Openvpn
  19. facebook开源的prophet时间序列预测工具---识别多种周期性、趋势性(线性,logistic)、节假日效应,以及部分异常值
  20. Python学习---Python安装与基础1205

热门文章

  1. HDU6739 Invoker 【dp】
  2. centOS服务器-firewall防火墙开放端口
  3. Object类的equals方法 常用API
  4. Oracle存储过程——日常记录
  5. linux 下tomcat出现 Native memory allocation (malloc) failed to allocate 1915224064 bytes for committing reserved memory问题
  6. Win10修改字体
  7. 虚拟机(VM)安装openwrt-koolshare软路由
  8. fontmin字体子集
  9. Linux/CentOS 配置Mysql-server过程和遇到错误解决方法
  10. bzoj2152 聪聪可可 (树形dp)