1563: [NOI2009]诗人小G

https://lydsy.com/JudgeOnline/problem.php?id=1563

分析:

  直接转移f[i]=f[j]+cost(i,j),cost(i,j)=(sum[i]-sum[j])p

  然后有决策单调性,就可以二分+队列了。注意两个字符串之间还有一个空格,所以长度+1,很多字符串合起来后,总的长度还要-1,最后一个没空格。

  证明?byvoid

  luogu输出方案,加上后一直过不了,g,nxt数组是输出方案的部分

代码:

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cctype>
#include<set>
#include<vector>
#include<queue>
#include<map>
#define fi(s) freopen(s,"r",stdin);
#define fo(s) freopen(s,"w",stdout);
using namespace std;
typedef long long LL;
typedef long double LD; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
const LL INF = 1e18; char str[N][], pr[];
int len[N], g[N], nxt[N];
LD f[N];
LL sum[N];
int n, Len, P;
struct Node{
int p, l, r;
Node() {}
Node(int _,int __,int ___) { p = _, l = __, r = ___; }
}q[N]; LD ksm(LD x) {
LD ans = ; int b = P;
while (b) {
if (b & ) ans = ans * x;
x = x * x;
b >>= ;
}
return ans;
}
void init() {
n = read(), Len = read(), P = read();
for (int i=; i<=n; ++i) {
scanf("%s", str[i] + );
sum[i] = sum[i - ] + (len[i] = strlen(str[i] + ) + );
}
}
LD Calc(int i,int j) {
return f[j] + ksm(abs(sum[i] - sum[j] - Len - ));
}
int binary_search(int l,int r,int x,int y) {
int ans = n;
while (l <= r) {
int mid = (l + r) >> ;
if (Calc(mid, x) < Calc(mid, y)) ans = mid, r = mid - ;
else l = mid + ;
}
return ans;
}
void solve() {
int L = , R = ;
q[++R] = Node(, , n);
for (int i=; i<=n; ++i) {
while (L <= R && q[L].r < i) L ++;
int j = q[L].p;
f[i] = Calc(i, j);
g[i] = j;
if (Calc(n, q[R].p) < Calc(n, i)) continue; // 如果最后一个点从i转移不优,那么说明i没有覆盖的区间,不需要二分了
while (L <= R && Calc(q[R].l, q[R].p) > Calc(q[R].l, i)) R --;
q[R].r = binary_search(q[R].l, n, i, q[R].p) - ;
q[++R] = Node(i, q[R - ].r + , n);
}
}
void print() {
if (f[n] > INF) puts("Too hard to arrange");
else printf("%lld\n", (LL)(f[n]));
puts(pr);
}
int main() {
strcpy(pr, "--------------------");
int T = read();
while (T--) {
init();
solve();
print();
}
return ;
}

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

  1. [BZOJ] 1563: [NOI2009]诗人小G

    1D/1D的方程,代价函数是一个p次函数,典型的决策单调性 用单调队列(其实算单调栈)维护决策点,优化转移 复杂度\(O(nlogn)\) #include<iostream> #incl ...

  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. pushlet服务端推送——多播

    版权声明:本文为博主牟云飞原创文章.未经博主同意不得转载. https://blog.csdn.net/myfmyfmyfmyf/article/details/36364337 ---------- ...

  2. linux 根据端口号查看占用进程的pid

    1.netstat -nap | grep 端口号 2.第一种的可以查看端口号对应的pid,但是会出现pid为空的情况,这种时候用:lsof -i:端口号 3.根据pid查看端口号 netstat - ...

  3. 洛谷P2336 [SCOI2012]喵星球上的点名(后缀数组+莫队)

    我学AC自动机的时候就看到了这题,想用AC自动机结果被学长码风劝退-- 学后缀数组时又看到了这题--那就写写后缀数组做法吧 结果码风貌似比当年劝退我的学长还毒瘤啊 对所有的模式串+询问串,不同串之间用 ...

  4. 阿里云阿里免费ssl wap网站在手机微信、手机浏览器无法访问

    图片可以访问,样式无法显示 https://css.cnbuses.com/css/wap/gonggong.css 1,怀疑是开了代理访问. 关闭后还是访问空白. 2.在手机浏览器打开,提示该网站的 ...

  5. DDL-数据类型

    一.数值型1.整型tinyint.smallint.mediumint.int/integer.bigint1         2        3          4            8 特 ...

  6. 3.5mm手机插孔自制万能遥控器

    电视机 空调等遥控器用5MM LED发射二极管 940nm红外发射管 50只 拍一份就是100只 包邮 电压:1.1-1.4v 电流:20mA 发射角度:45°

  7. 项目中常用的MySQL优化方法--壹拾玖条

    1.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我们要重点关注的数据: type列,连接类型.一个好的SQL语句至少要 ...

  8. Kafka 部署指南-好久没有更新博客了

    最近到了一家新公司,很多全新技术栈要理解.每天都在看各类 English Offcial Document,我的宗旨是我既然看懂了,就写下来分享,这是第一篇. 基本需求: 1.已有 zookeeper ...

  9. async函数结合promise的小案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 小程序中 function (res)的理解

    刚看到小程序里面一段代码 success: function (res) { console.log('搜索结果:'); console.log(res); wx.hideToast(); if (r ...