BZOJ3675 序列分隔
来源:互联网 发布:cydia软件源2017 编辑:程序博客网 时间:2024/05/20 23:39
Description
小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤:
1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列);
2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。
每次进行上述步骤之后,小H将会得到一定的分数。这个分数为两个新序列中元素和的乘积。小H希望选择一种最佳的分割方式,使得k轮之后,小H的总得分最大。
Input
输入第一行包含两个整数n,k(k+1≤n)。
第二行包含n个非负整数a1,a2,…,an(0≤ai≤10^4),表示一开始小H得到的序列。
Output
输出第一行包含一个整数,为小H可以得到的最大分数。
数据满足2≤n≤100000,1≤k≤min(n -1,200)。
斜率优化第一题,写得无比辣鸡。
最后发现一直WA的原因竟然是long long!简直可怕
注意单调队列的边界条件,只剩一个点时斜率应视为无穷大。
还有,相同的点后面的理应挤掉前面的。
#include<cstdio>#define gm 100001typedef unsigned long long ull;int n,k;ull a[gm];ull ans[gm][2];struct pnt{ ull x,y;}que[gm];int f,r;double xl;bool nowb=0;inline ull val(const pnt &p,const int &i){ return ull(a[i])*p.x-p.y;}void getans(int i,int k){ while(f<r&&val(que[f],i)<val(que[f+1],i)) f++; ans[i][k]=val(que[f],i);}inline double gxl(const pnt &a,const pnt &b){ return a.x!=b.x ? double(b.y-a.y)/(b.x-a.x) : 2100000000 * (b.y>a.y ? 1 : -1) ;}void push(int i,int k){ pnt now=(pnt){a[i],a[i]*a[i]-ans[i][k]}; while(f<=r&&gxl(que[r],now)<xl) { r--; if(f>=r) xl=-2000000000; else xl=gxl(que[r-1],que[r]); } que[++r]=now; if(f==r) xl=-2000000000; else xl=gxl(que[r-1],now);}int main(){ //freopen("a.cpp","r",stdin); scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%llu",&a[i]); a[i]+=a[i-1]; } for(int i=1;i<=k;i++) { f=1;r=0; xl=-2000000000; for(int j=i;j<=n;j++) { getans(j,nowb); push(j,nowb^1); } nowb^=1; } printf("%llu",ans[n][nowb^1]); return 0;}
0 0
- BZOJ3675 序列分隔
- APIO2014序列分割bzoj3675
- bzoj3675: [Apio2014]序列分割
- [BZOJ3675][Apio2014]序列分割
- [BZOJ3675] [Apio2014]序列分割
- bzoj3675【APIO2014】序列分割
- BZOJ3675 Apio2014 序列分割
- bzoj3675[Apio2014] 序列分割
- bzoj3675: [Apio2014]序列分割
- bzoj3675: [Apio2014]序列分割
- BZOJ3675: [Apio2014]序列分割
- BZOJ3675: [Apio2014]序列分割
- bzoj3675 [Apio2014]序列分割
- bzoj3675 [Apio2014]序列分割
- 【BZOJ3675】[Apio2014]序列分割【斜率优化】
- 【BZOJ3675】序列统计,斜率优化DP
- BZOJ3675 [Apio2014]序列分割 斜率优化
- bzoj3675 [APIO2014] 序列分割(斜率优化)
- 面试必须掌握的十个海量数据问题及解决方案
- UITextView的placeholder
- Day 4:一个程序运行成功及解决方法
- 数据结构实验之二叉树三:统计叶子数
- win7+Qt+Opencv 配置
- BZOJ3675 序列分隔
- 张量ADMM算法
- 华为OJ——字符串最后一个单词的长度
- Unity3D协程介绍以及使用
- 树链剖分
- JS组件系列——表格组件神器:bootstrap table
- C# office在线预览
- Spring五种事务配置
- UML类图6种关系的总结