显然:f[i]=min{f[j]+(s[i]-s[j]+i-j-1-l)^p}

此题可以基于决策单调优化

证明,反正我现在不打算学

实际上就是双向队列

不停弹出队头的元素,直到当前位置在队头元素最优的范围内。

然后,每次把当前决策插入队尾,并弹出没它优的答案。

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std; typedef long double ll;
const int MAXN=1e5+;
struct node{int l,r,p;}q[MAXN];
ll sum[MAXN],f[MAXN];
int T,n,l,p;
char s[]; ll pow(ll x){
int y=p;ll ret=;
while(y){
if(y&)ret=ret*x;
x*=x,y>>=;
}
return ret;
} ll calc(int x,int y){
return f[x]+pow(abs(sum[y]-sum[x]+(y-x-)-l));
} int find(node x,int i){
int l=x.l,r=x.r;
while(l<=r){
int mid=(l+r)>>;
if(calc(i,mid)<=calc(x.p,mid))r=mid-;
else l=mid+;
}
return l;
} void DP_1d1d(){
int head=,tail=;
q[++tail]=(node){,n,};
for(int i=;i<=n;i++){
if(head<=tail && q[head].r<i)head++;
f[i]=calc(q[head].p,i);
if(calc(i,n)<=calc(q[tail].p,n)){
while(head<=tail && calc(q[tail].p,q[tail].l)>=calc(i,q[tail].l) )tail--;
if(head>tail)q[++tail]=(node){i,n,i};
else{
int x=find(q[tail],i);
q[tail].r=x-;
q[++tail]=(node){x,n,i};
}
}
}
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&l,&p);
for(int i=;i<=n;i++)scanf("%s",s),sum[i]=sum[i-]+strlen(s);
DP_1d1d();
if(f[n]>1e18)puts("Too hard to arrange");
else printf("%lld\n",(long long)f[n]);
puts("--------------------");
}
return ;
}

DP_1d1d

最新文章

  1. [LeetCode]Lowest Common Ancestor of a Binary Search Tree
  2. nodejs-2:模块与包管理工具
  3. labview学习_入门篇(一)
  4. css/js(工作中遇到的问题)-3
  5. 尝试制作了一个Panorama
  6. Linux运维操作
  7. 2016年11月27日 星期日 --出埃及记 Exodus 20:18
  8. 通过 Javacore 诊断线程挂起等性能问题
  9. [物理学与PDEs]第1章 电动力学
  10. iOS组件化思路-大神博客研读和思考
  11. java高级:weakReference
  12. BZOJ 1602: [Usaco2008 Oct]牧场行走( 最短路 )
  13. 201521123087《Java程序设计》第14周学习总结
  14. kubernetes入门(06)kubernetes的核心概念(3)
  15. 生活日历NABCD需求分析
  16. Python 30分钟快速入门指南
  17. django2.0.6 连接使用redis集群
  18. poj 1177 --- Picture(线段树+扫描线 求矩形并的周长)
  19. cf666 C. Codeword 组合数学
  20. 继承映射中的java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: person is not mapped [FROM person]

热门文章

  1. 从servlet向jsp中传数据用Java接收js调用
  2. Pytest学习7-参数化
  3. vm virtualbox 里的ubuntu挂载windows的文件夹
  4. 2020牛客寒假算法基础集训营3 G.牛牛的Link Power II (树状数组维护前缀和)
  5. MAC MAMP集成环境安装 PHP 扩展
  6. EF CodeFirst数据注解特性详解
  7. tomcat集群搭建集成nginx负载均衡
  8. PyQt5学习笔记-从主窗体打开一个子窗体
  9. springmvc的框架搭建及工作流程
  10. foreach中如何取全部长度的值