题面

传送门

Sol

左右可以分开搞

然后就是要形成一个类似梳子的东西

设\(f[0/1][i][j]\)

\(0\)凹,\(1\)凸,\(i\)为行,可以滚一维,\(j\)为该行长度

\(f[0][i][j] = min(f[0][i - 1][j], f[1][i - 1][k]) + j - a[i]; k > j\)

\(f[1][i][j] = min(f[1][i - 1][j], f[0][i - 1][k]) + j - a[i]; k < j\)

然后是\(O(n^3)\)优化可以变成\(O(n^2)\)

可以有\(50\)

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
const int INF(1e9);
const int _(1e6 + 5);
typedef long long ll; IL int Input(){
RG int x = 0, z = 1; RG char c = getchar();
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
} int n, l[_], r[_], ans, f[2][2][_], MX; IL int Solve(){
Fill(f, 63);
for(RG int i = r[1]; i <= MX; ++i) f[0][1][i] = i - r[1];
for(RG int i = 2; i <= n; ++i){
RG int p = i & 1, q = p ^ 1;
for(RG int j = 0; j < r[i]; ++j) f[0][p][j] = f[1][p][j] = INF;
for(RG int j = MX, mn = INF; j >= r[i]; --j){
f[0][p][j] = min(f[0][q][j], mn) + j - r[i];
mn = min(mn, f[1][q][j]);
}
RG int mn = INF;
for(RG int j = 0; j < r[i]; ++j) mn = min(mn, f[0][q][j]);
for(RG int j = r[i]; j <= MX; ++j){
f[1][p][j] = min(f[1][q][j], mn) + j - r[i];
mn = min(mn, f[0][q][j]);
}
}
RG int ret = INF;
for(RG int i = r[n]; i <= MX; ++i) ret = min(ret, f[0][n & 1][i]);
return ret;
} int main(RG int argc, RG char* argv[]){
n = Input();
for(RG int i = 1; i <= n; ++i)
l[i] = Input(), r[i] = Input(), MX = max(MX, r[i] + 1);
ans += Solve();
for(RG int i = 1; i <= n; ++i) r[i] = MX - l[i];
printf("%d\n", ans + Solve());
return 0;
}

正解有个结论,这一行的\(dp\)值只跟上下两行的长度有关

并且只能为所有的\([a[i], a[i]+2]\)的并

然后不会证明

看代码就会写了

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
const int INF(1e9);
const int _(1e6 + 5);
typedef long long ll; IL int Input(){
RG int x = 0, z = 1; RG char c = getchar();
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
} int n, l[_], r[_], ans, f[2][2][_], MX, g[2][_], t[2]; IL int Solve(){
Fill(f, 63), t[1] = 0; RG int rr = min(3, n);
for(RG int i = 1; i <= rr; ++i)
for(RG int j = r[i]; j <= r[i] + 2; ++j)
if(j >= r[1]) g[1][++t[1]] = j;
for(RG int i = 1; i <= t[1]; ++i) f[0][1][i] = g[1][i] - r[1];
for(RG int i = 2; i <= n; ++i){
RG int q = i & 1, p = q ^ 1; t[q] = 0;
RG int ll = max(1, i - 2), rr = min(i + 2, n);
for(RG int j = ll; j <= rr; ++j)
for(RG int k = r[j]; k <= r[j] + 2; ++k)
if(k >= r[i]) g[q][++t[q]] = k;
for(RG int j = 1; j <= t[q]; ++j){
f[0][q][j] = f[1][q][j] = INF;
for(RG int k = 1; k <= t[p]; ++k){
if(g[p][k] > g[q][j]) f[0][q][j] = min(f[0][q][j], f[1][p][k]);
else if(g[p][k] < g[q][j]) f[1][q][j] = min(f[1][q][j], f[0][p][k]);
else f[0][q][j] = min(f[0][q][j], f[0][p][k]), f[1][q][j] = min(f[1][q][j], f[1][p][k]);
}
f[0][q][j] += g[q][j] - r[i], f[1][q][j] += g[q][j] - r[i];
}
}
RG int ret = INF, q = n & 1;
for(RG int i = 1; i <= t[q]; ++i) ret = min(ret, f[0][q][i]);
return ret;
} int main(RG int argc, RG char* argv[]){
freopen("worm.in", "r", stdin);
freopen("worm.out", "w", stdout);
n = Input();
for(RG int i = 1; i <= n; ++i)
l[i] = Input(), r[i] = Input(), MX = max(MX, r[i] + 1);
ans += Solve();
for(RG int i = 1; i <= n; ++i) r[i] = MX - l[i];
printf("%d\n", ans + Solve());
return 0;
}

Bzoj1496: [NOI2006]千年虫的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. [NOI2006] 最大获利

    [NOI2006] 最大获利 ★★★☆   输入文件:profit.in   输出文件:profit.out   简单对比时间限制:2 s   内存限制:512 MB [问题描述] 新的技术正冲击着手 ...

  3. BZOJ1497: [NOI2006]最大获利[最小割 最大闭合子图]

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 4375  Solved: 2142[Submit][Status] ...

  4. BZOJ 1497: [NOI2006]最大获利 最小割

    1497: [NOI2006]最大获利 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1497 Description 新的技术正冲击着手 ...

  5. BZOJ_1497_[NOI2006]_最大获利_(最大流+最大权闭合图)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1497 共n个站点,给出建立每个站点所需要的花费.现在有m个客户需要开通服务,每个客户需要有两个 ...

  6. 网络流(最大流):COGS 28 [NOI2006] 最大获利

    28. [NOI2006] 最大获利 ★★★☆   输入文件:profit.in   输出文件:profit.out   简单对比 时间限制:2 s   内存限制:512 MB [问题描述] 新的技术 ...

  7. BZOJ 1416: [NOI2006]神奇的口袋( 高精度 )

    把x1~xn当成是1~n, 答案是不会变的. 然后直接模拟就行了...... P.S 双倍经验... BZOJ1416 && BZOJ1498 -------------------- ...

  8. BZOJ 1497: [NOI2006]最大获利( 最大流 )

    下午到周六早上是期末考试...但是我还是坚守在机房....要挂的节奏啊.... 这道题就是网络流 , 建图后就最大流跑啊跑啊跑... --------------------------------- ...

  9. BZOJ 1497: [NOI2006]最大获利(最大权闭合子图)

    1497: [NOI2006]最大获利 Time Limit: 5 Sec  Memory Limit: 64 MB Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机 ...

随机推荐

  1. c调用 lua 栈操作

    转自https://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 打算记录一些lua_api, 可能会觉得lua文档中已经说的很清楚了, ...

  2. c++11 perfect forwarding

    完美转发是c++11 引入右值引用之后,在template 中的延伸. 顾名思义,完美转发是将参数不改变属性的条件下,转发给下一个函数. 因为普通函数的参数一旦具名,始终都是lvalue. 如果把rv ...

  3. 提交app时候遇到IDFA警告

    1.最近提交app时候遇到如下问题,解决方案: Everything has come to its usual state now. Simply upload your binary as you ...

  4. gitlab容器--带https配置

    #2.gitlab 重要目录 /home/maks/gitlab/config /etc/gitlab /home/maks/gitlab/logs /var/log/gitlab /home/mak ...

  5. Windows下Anaconda安装 python + tensorflow CPU版

    下载安装Anaconda 首先下载Anaconda,可以从清华大学的镜像网站进行下载. 安装Anaconda,注意安装时不要将添加环境变量的选项取消掉. 安装完成之后,在安装目录下cmd,输入: co ...

  6. (一)使用appium之前为什么要安装nodejs???

    很多人在刚接触appium自动化时,可能会像我一样,按照教程搭建好环境后,却不知道使用appium之前为什么要用到node.js,nodejs到底和appium是什么关系,对nodejs也不是很了解, ...

  7. Numpy中扁平化函数ravel()和flatten()的区别

    在Numpy中经常使用到的操作由扁平化操作,Numpy提供了两个函数进行此操作,他们的功能相同,但在内存上有很大的不同. 先来看这两个函数的使用: from numpy import * a = ar ...

  8. 高阶篇:4.4)FMEA手册的疑问与不足(个人观点)

    本章目的:如题,述说FMEA手册第四版的疑问与不足. 1.前言 作者接触FMEA,并真正将其作为可靠性设计方法,也是在近几年的时候,所以不能说算是一个FMEA专家吧. 但作者也有一些自己的优势,就是自 ...

  9. js高级程序设计 笔记 --- 错误处理、json和ajax

    1,错误处理 1,try-catch语句 try{可能导致错误的代码} catch(error) {在错误发生时该怎么处理} error.message是所有浏览器都支持的属性. finally语句是 ...

  10. Http Header之User-Agent

    Http Header之User-Agent User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头.通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信 ...