【经典dp 技巧】8.13序列
2024-10-06 18:34:01
经典的拆绝对值
题目大意
给定$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
最新文章
- 聊天室(Java实现)
- 计算机病毒实践汇总六:IDA Pro基础
- nyoj221_Tree_subsequent_traversal
- cf378C(模拟)
- Sea.js学习1——初识Sea.js
- mybatis的jdbcType类型
- 基础面试题——Javascript
- 【转】缓存淘汰算法系列之3——FIFO类
- Myeclipse2014 已有项目更换JDK
- important覆盖行内样式
- 广州.NET微软技术俱乐部微信群各位技术大牛的blog
- 分布式拒绝服务攻击(DDoS:Distributed Denial of Service)
- JavaScript使用注意事项
- seaweedFS
- window10 显示QQ图标
- 关hashMap跟hashTable的区别
- ThreadPoolTaskExecutor多线程使用,及线程池配置
- CentOS7.3 搭建Openvpn
- facebook开源的prophet时间序列预测工具---识别多种周期性、趋势性(线性,logistic)、节假日效应,以及部分异常值
- Python学习---Python安装与基础1205
热门文章
- HDU6739 Invoker 【dp】
- centOS服务器-firewall防火墙开放端口
- Object类的equals方法 常用API
- Oracle存储过程——日常记录
- linux 下tomcat出现 Native memory allocation (malloc) failed to allocate 1915224064 bytes for committing reserved memory问题
- Win10修改字体
- 虚拟机(VM)安装openwrt-koolshare软路由
- fontmin字体子集
- Linux/CentOS 配置Mysql-server过程和遇到错误解决方法
- bzoj2152 聪聪可可 (树形dp)