1D/1D的方程,代价函数是一个p次函数,典型的决策单调性

用单调队列(其实算单调栈)维护决策点,优化转移

复杂度\(O(nlogn)\)

#include<iostream>
#include<cstring>
#include<cstdio> using namespace std; const int MAXN = 100005;
typedef long double ll; struct Node{
int l,r,p;
Node(int _l=0,int _r=0,int _p=0){l=_l;r=_r;p=_p;}
}q[MAXN]; ll f[MAXN],s[MAXN];
int T,n,len; ll p;
ll qpow(ll x,int y){
if(x<0)x=-x;
ll ret=1ll;
while(y){
if(y&1)ret*=x;
x*=x;
y>>=1;
}
return ret;
}
ll calc(int x,int y){return f[x]+qpow(s[y]-s[x]-len,p);} int fnd(const Node &x,int y){
int l=x.l,r=x.r+1,p=x.p,mid,ret=l;
while(l<r){
mid=(l+r)>>1;
if(calc(y,mid)<=calc(p,mid))r=mid;
else l=mid+1;
}
return l;
} char str[32];
void solve(){
cin>>n>>len>>p;len++;
s[0]=0;f[0]=0;
for(int i=1;i<=n;i++){
scanf("%s",str);
s[i]=s[i-1]+strlen(str)+1;
}
int h=1,t=0;
q[++t]=Node(1,n,0);
for(int i=1;i<=n;i++){
while(h<=t&&q[h].r<i)h++;
f[i]=calc(q[h].p,i);
if(calc(i,n)<=calc(q[t].p,n)){
while(h<=t&&calc(i,q[t].l)<calc(q[t].p,q[t].l))t--;
if(h>t){q[++t]=Node(i+1,n,i);continue;}
int x=fnd(q[t],i);
q[t].r=x-1;q[++t]=Node(x,n,i);
}
}
if(f[n]>1e18){puts("Too hard to arrange");return;}
printf("%.0Lf\n",f[n]);
} int main(){
// freopen("out.out","w",stdout);
cin>>T;
while(T--)solve(),puts("--------------------");
}

[BZOJ] 1563: [NOI2009]诗人小G的更多相关文章

  1. 1563: [NOI2009]诗人小G

    1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...

  2. bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)

    目录 题目链接 题解 代码 题目链接 bzoj1563: [NOI2009]诗人小G 题解 \(n^2\) 的dp长这样 \(f_i = min(f_j + (sum_i - sum_j - 1 - ...

  3. [NOI2009]诗人小G --- DP + 决策单调性

    [NOI2009]诗人小G 题目描述: 小G是一个出色的诗人,经常作诗自娱自乐. 但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并 ...

  4. P1912 [NOI2009]诗人小G

    P1912 [NOI2009]诗人小G 思路: 平行四边形不等式优化dp 因为f(j, i) = abs(sum[i]-sum[j]+i-j-1-l)^p 满足平行四边形不等式 j < i f( ...

  5. LG1912 [NOI2009]诗人小G

    题意 题目描述 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以 ...

  6. [NOI2009] 诗人小G [题解]

    诗人小G 题目大意 给出 \(n\) 个长度不超过 \(30\) 的句子,要求你对其进行排版. 对于每一行,有一个规定的行标准长度 \(L\) ,每一行的不协调度等于该行的实际长度与行标准长度差的绝对 ...

  7. 【BZOJ 1563】 [NOI2009]诗人小G

    Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...

  8. NOI2009 诗人小G

    Sol 决策单调性+二分 传说中的四边形不等式...其实做了这道题还是不会... 证明简直吃屎//// 贴个传送门这里有部分分做法还有决策单调性的证明 byvoid ISA tell me that ...

  9. 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)

    洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...

随机推荐

  1. python——字符编码

    Unicode 是字符集 UTF-8 是编码规则 Unicode:给每一个字符分配一个唯一的ID(又称码位). 编码规则:将码位转换为字节序列的规则. 1.什么是字符编码:字符翻译成数字,所遵循的标准 ...

  2. Codeforces Round 56-A. Dice Rolling(思维题)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  3. struts的logic标签和<bean:write/>详情

    https://baike.baidu.com/item/Logic%E6%A0%87%E7%AD%BE/2292947?fr=aladdin https://blog.csdn.net/applea ...

  4. Codeforces Round #377 (Div. 2) E. Sockets

    http://codeforces.com/contest/732/problem/E 题目说得很清楚,每个电脑去插一个插座,然后要刚好的,电脑的power和sockets的值相同才行. 如果不同,还 ...

  5. SmartWeatherAPI C#版

    private string GetKey(string areaId, string type, string date, string appId, string privateKey) { va ...

  6. js屏蔽鼠标右键事件

    <script type="text/javascript">function stops(){ return false;}document.oncontextmen ...

  7. filter和map的使 使得数组对象变数组

    let UnitList = this.paytypeData.filter( item => item.CheckBox === true ).map(axis => axis.Unit ...

  8. ios 11 12以后下拉刷新不回位的解决方法

    原因:  iOS11弃用了automaticallyAdjustsScrollViewInsets属性,新增contentInsetAdjustmentBehavior来替代它 //解决方案 添加如下 ...

  9. Unity的stateMachineBehaviour

    Unity5新增的StateMachineBehaviour是对状态机的内置,确实方便了很多,这里记录它的两个问题: 1.如果正在执行的状态被打断,当前状态的OnStateExit不会被执行,该问题在 ...

  10. HDU 4283 You Are the One (区间DP,经典)

    题意: 某校举行一场非诚勿扰,给定一个出场序列,表示n个人的屌丝值,如果他是第k个出场的,他的不满意度为(k-1)*diao[i].为了让所有人的屌丝值之和更小,导演设置一个栈,可以将部分人装进栈中, ...