bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)
目录
题目链接
题解
\(n^2\) 的dp长这样
\(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\)
设\(w_{ij} = (sum_i - sum_j - 1 - L)^P\)
那么化成1D1D的标准形式
$ f_i = min(f_j + w_{i,j}) $
发现w满足四边形不等式
证明可以看这里
https://www.byvoid.com/zhs/blog/noi-2009-poet
因此状态转移方程具有单调性
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define gc getchar()
#define pc putchar
#define LD long double
inline int read() {
int x = 0,f = 1;
char c = gc;
while(c < '0' || c > '9' )c = gc;
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc;
return x * f ;
}
void print(LL x) {
if(x >= 10) print(x / 10);
pc(x % 10 + '0');
}
const int maxn = 100007;
char s[maxn][32];
int n,L,p;
inline LD fstpow(LD x,int k) {
LD ret = 1;
for(;k;k >>= 1,x = x * x) if(k & 1) ret *= x;
return ret;
}
LD f[maxn];
int sum[maxn];
LD calc(int j,int i) {
return f[j] + fstpow(std::abs(sum[i] - sum[j] - L),p);
}
int find(int x,int y) {
int l = x,r = n,ret = 0;
while(l <= r) {
int mid = l + r >> 1;
if(calc(x,mid) >= calc(y,mid)) r = mid - 1;
else l = mid + 1;
}
return l;
}
int q[maxn],c[maxn];
int pre[maxn];
void solve() {
n = read(),L = read() + 1,p = read();
for(int i = 1;i <= n;++ i) {
scanf("%s",s[i] + 1);
sum[i] = sum[i - 1] + strlen(s[i] + 1) + 1;
}
int h = 1,t = 1;
q[h] = 0;
for(int i = 1;i <= n;++ i) {
while(h < t && c[h] <= i) ++ h;
f[i] = calc(q[h],i); pre[i] = q[h];
while(h < t && c[t - 1] >= find(q[t],i)) t --;
c[t] = find(q[t],i); q[++ t] = i;
}
if(f[n] > 1e18) {
puts("Too hard to arrange\n--------------------");
return;
}
printf("%.0Lf\n", f[n]);
puts("--------------------");
}
int main() {
int T = read();
for(int i = 1; i <= T; ++ i) {
solve();
}
return 0;
}
bzoj1563: [NOI2009]诗人小G 决策单调性(1D1D)的更多相关文章
- BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...
- [BZOJ1563][NOI2009]诗人小G(决策单调性优化DP)
模板题. 每个决策点都有一个作用区间,后来的决策点可能会比先前的优.于是对于每个决策点二分到它会比谁在什么时候更优,得到新的决策点集合与区间. #include<cstdio> #incl ...
- BZOJ1563:[NOI2009]诗人小G(决策单调性DP)
Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arr ...
- [NOI2009]诗人小G 决策单调性优化DP
第一次写这种二分来优化决策单调性的问题.... 调了好久,,,各种细节问题 显然有DP方程: $f[i]=min(f[j] + qpow(abs(sum[i] - sum[j] - L - 1))); ...
- P1912 [NOI2009]诗人小G[决策单调性优化]
地址 n个数划分若干段,给定$L$,$p$,每段代价为$|sum_i-sum_j-1-L|^p$,求总代价最小. 正常的dp决策单调性优化题目.不知道为什么luogu给了个黑题难度.$f[i]$表示最 ...
- BZOJ_1563_[NOI2009]诗人小G_决策单调性
BZOJ_1563_[NOI2009]诗人小G_决策单调性 Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超 ...
- [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性)
[BZOJ 1563] [NOI 2009] 诗人小G(决策单调性) 题面 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的.小 G ...
- BZOJ1563 NOI2009诗人小G(动态规划+决策单调性)
设f[i]为前i行的最小不协调度,转移枚举这一行从哪开始,显然有f[i]=min{f[j]+abs(s[i]-s[j]+i-j-1-m)p}.大胆猜想有决策单调性就好了.证明看起来很麻烦,从略.注意需 ...
- 2018.09.28 bzoj1563: [NOI2009]诗人小G(决策单调性优化dp)
传送门 决策单调性优化dp板子题. 感觉队列的写法比栈好写. 所谓决策单调性优化就是每次状态转移的决策都是在向前单调递增的. 所以我们用一个记录三元组(l,r,id)(l,r,id)(l,r,id)的 ...
随机推荐
- MAC上mongodb连接不上
1.在Mac客户端里输入 mongo,发现mongo连接不上了,原因是mongo的服务没有开启. 2.在命令行了输入 mongod,开启服务的命令 3.启动起来以后,用mongo连接服务器.
- 图文并茂的Python教程-numpy.pad
图文并茂的Python教程-numpy.pad np.pad()常用与深度学习中的数据预处理,可以将numpy数组按指定的方法填充成指定的形状. 声明: 需要读者了解一点numpy数组的知识np.pa ...
- 在12C上创建wm_concat函数
11gr2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中确使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数,来临时解决该 ...
- Expm 3_2 寻找最邻近的点对
[问题描述] 设p1=(x1,y1), p2=(x2,y2), … , pn=(xn,yn) 是平面上n个点构成的集合S,设计和实现找出集合S中距离最近点对的算法. 每一个格子最多只能存在一个点, ...
- sklearn调参(验证曲线,可视化不同参数下交叉验证得分)
一 . 原始方法: 思路: 1. 参数从 0+∞ 的一个 区间 取点, 方法如: np.logspace(-10, 0, 10) , np.logspace(-6, -1, 5) 2. 循环调用cr ...
- PYTHON-有参装饰器,无参装饰器,语法糖
装饰器 装饰器就是闭包函数的一种应用场景 一 为何要用装饰器 #开放封闭原则:对修改封闭,对扩展开放 二 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强 ...
- Linux查看文件命令
linux查看日志文件内容命令有 cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写 nl 显示的时候,顺道输出行号! more 一页一页的显示文件内 ...
- iOS学习笔记之异步图片下载
写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求.尽管有很多现存的第三方库可以将下载和缓存功能都封装好 ...
- python 全栈开发,Day92(编程式的导航,vue页面布局,marked包的使用)
昨日内容回顾 1. 组件间的传值 1. bus --> 空Vue对象 通过向bus对象抛出自定义事件的方式在组件间传递信息 2. 注意事项: 1. bus.$on()应该在组件mounted(挂 ...
- Javascript中的函数(三)
一:概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质 ...