luogu P2470 [SCOI2007]压缩

传送门

dalao们怎么状态都设的两维以上啊?qwq 完全可以一维状态的说

\(f[i]\)为前缀i的答案,转移就枚举从前面哪里转移过来\(f[i]=min(f[j-1]+w(j,i))(j\in [1,i])\)

现在要知道\(w(i,j)\)怎么写,也就是区间\([i,j]\)的最小长度(要求区间最多只能在开头有一个W),首先不压缩的长度就是原长度,然后压缩的话先要在开头加W,然后每次压缩一个最长的可以拆成两个相同串的前缀,压缩完后长度会加上1(后面接R),减去那个前缀的一半长度,然后那个前缀会缩掉后一半.把这些所有的长度取min就是这个区间的答案.这个压缩过程可以结合样例理解

注意开头是默认加好了W的

细节详见代码

#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register
#define uLL unsigned long longusing namespace std;
const int N=55;
il int rd()
{int x=0,w=1;char ch=0;while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w;
}
char cc[N];
uLL ha[N],bs[N];
il uLL hh(int l,int r){return ha[r]-ha[l-1]*bs[r-l+1];}
int n,f[N];
il int w(int l,int r)
{int an=r-l+1+(l==1),nw=1; //左端点为1,由于开头加好了W,所以这里不压缩长度先加上1平衡压缩要加上的Wwhile(l<r){int mid=(l+r)>>1;while(l<r&&hh(l,mid)!=hh(mid+1,r)) --r,++nw,mid=(l+r)>>1;if(l>=r) break;++nw,r=mid;an=min(an,nw+r-l+1); //代价也可以看做M的个数+R的个数+后面的一些零碎字母+前半截前缀长度}return an;
}int main()
{scanf("%s",cc+1),n=strlen(cc+1);bs[0]=1;for(int i=1;i<=n;++i) bs[i]=bs[i-1]*233,ha[i]=ha[i-1]*233+cc[i],f[i]=i+1;for(int i=1;i<=n;++i)for(int j=1;j<=i;++j)f[i]=min(f[i],f[j-1]+w(j,i));printf("%d\n",f[n]-1);  //把开头没有的W减掉
}

转载于:https://www.cnblogs.com/smyjr/p/10353647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器选择重装系统,云服务器重装系统选择

云服务器重装系统选择 内容精选换一换将外部镜像文件注册成云平台的私有镜像后&#xff0c;您可以使用该镜像创建新的云服务器&#xff0c;或对已有云服务器的系统进行重装和更换。本节介绍使用镜像创建云服务器的操作。您可以按照通过镜像创建云服务器中的操作指导创建弹性云服…

T-Mobile美国加速开展5G实验:28GHz频段成为新宠

据日经社报道&#xff0c;T-Mobile美国公司正在加速开展5G相关工作&#xff0c;在过去的一个月中动作频频。 T-Mobile美国与三星电子美国公司上月初共同宣布&#xff0c;将在今年下半年使用28GHz频段和配备三星的波束成形技术的5G验证实验系统&#xff0c;开展室外5G移动通信的…

软件项目可行性分析定义_如何定义最低可行产品

软件项目可行性分析定义by George Krasadakis通过乔治克拉萨达基斯(George Krasadakis) 如何定义最低可行产品 (How to define a Minimum Viable Product) 从概念转变为正确定义的MVP (Moving from a concept to a properly defined MVP) The Minimum Viable Product, althoug…

JavaSE第十五天20160823

线程 一、JAVA中创建线程的两种方法&#xff1a; 1.继承java.lang.Thread类。 2.实现java.lang.Runnable接口。 3.在JAVA中Thread类实现了Runnable接口&#xff0c;并且Thread类中定义了许多与线程相关的属性与方法。 二、run():线程体&#xff0c;线程将要执行的代码。 三、线…

dao层mysql复合语句_在业务中是使用多个Dao组合好,还是一个链接查询好?

问题描述假如目前有一个查询用户详情的接口用户基础表关联了很多用户其他信息的表&#xff0c;现在要把所有查询出来&#xff0c;是使用多个dao在service中组合&#xff0c;还是直接链接查询好示例代码用户表(user_base)用户信息表1(user_info_1)用户信息表2(user_info_2)用户信…

九阴真经战无不胜服务器位置,九阴真经各门派武功风水宝地分类及坐标大全

寻得一处风水宝地可以养神还可以修炼武功&#xff0c;九阴真经中的各大门派和全部武功适合修炼的宝地都在哪里呢&#xff1f;都分为哪几类&#xff0c;具体坐标是什么&#xff1f;1、风水宝地作用&#xff1a;九阴真经风水宝地共分山、水、洞、林、雪、市六种&#xff0c;分别对…

Gartner Q2服务器市场报告5大要点

服务器场景调查 根据市场研究公司Gartner的调查报告&#xff0c;第二季度Dell的服务器市场取得了丰富的成果&#xff0c;HPE的市场份额比去年同期略有下降&#xff0c;但仍保留了其全球服务器市场第一的位置。 Gartner表示&#xff0c;全球服务器销售收入在第二季度与去年同期相…

MySQL实战面试题_Mysql实战面试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼一、索引B Tree 原理1. 数据结构B Tree 指的是 Balance Tree&#xff0c;也就是平衡树。平衡树是一颗查找树&#xff0c;并且所有叶子节点位于同一层。B Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现&#xff0c;它具有 B T…

Redux有何优点?

by Justin Falcone贾斯汀法尔科内(Justin Falcone) Redux有何优点&#xff1f; (What’s So Great About Redux?) Redux elegantly handles complex state interactions that are hard to express with React’s component state. It is essentially a message-passing syste…

python基础——使用模块

python基础——使用模块 Python本身就内置了很多非常有用的模块&#xff0c;只要安装完毕&#xff0c;这些模块就可以立刻使用。 我们以内建的sys模块为例&#xff0c;编写一个hello的模块&#xff1a; #!/usr/bin/env python3 # -*- coding: utf-8 -*- a test module __author…

力扣——键盘行

给定一个单词列表&#xff0c;只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例&#xff1a; 输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", "Dad"]注意&#xff1a; 你可…

网络空间技术实验室:打造信息安全技术培育平台

从PC互联网到移动互联网&#xff0c;音视频、图片越来越成为大众关注的热点。过去&#xff0c;人们习惯于在网络浏览文字新闻&#xff1b;今天&#xff0c;人们对于视频新闻、图片新闻的接受度更高。 网络的发展无疑给人们带来了便利。但同时&#xff0c;一个不可否认的事实是&…

如何对mysql做物理备份_如何创建物理MySQL备份

前提条件在开始之前&#xff0c;确保你有一个有sudo权限的用户和一个MySQL数据库服务器。查找数据目录使用root密码登录到MySQL服务器。$ sudo mysql -u root -p下面的SQL显示MySQL实例的数据目录。mysql> select datadir;输出类似于-----------------| datadir |----------…

freecodecamp_1000天的freeCodeCamp

freecodecampToday, the freeCodeCamp community turns 1,000 days old. We’ve accomplished a lot together in that time:今天&#xff0c;freeCodeCamp社区已经有1000天的历史了。 到那时我们已经共同完成了很多工作&#xff1a; 6,000 campers have gotten their first d…

如何正确遍历删除List中的元素,你会吗?

遍历删除List中的元素有很多种方法&#xff0c;当运用不当的时候就会产生问题。下面主要看看以下几种遍历删除List中元素的形式&#xff1a; 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合条件的一个元素 3.通过普通的for删除删除符合条件的多个元素…

Jmeter 通过json Extracted 来获取 指定的值的id

在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID import java.lang.String ; String getTargetName"iphone632g"; //判读相应结果中是否包含指定值&#xff1a;iphone632g boolean containsCategoryprev.getResponseDataAsString().contains(getTarge…

mysql 结果保存到文件_将MySQL中sql运行结果保存到文件

将MySQL中sql运行结果保存到文件有两种方法。方法一&#xff1a;在mysql>提示符中使用teemysql> tee output.txtLogging to file output.txtmysql> noteeOutfile disabled.或者mysql> \T output.txtLogging to file output.txtmysql> \tOutfile disabled.这个类…

获取电脑和操作系统信息-uname

用法&#xff1a;uname [选项]...输出一组系统信息。如果不跟随选项&#xff0c;则视为只附加-s 选项。-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略&#xff1a;-s, --kernel-name 输出内核名称-n, --nodename 输出网络节点…

MobileSpace-关于我的激情的故事

by Monte Thakkar通过Monte Thakkar MobileSpace-关于我的激情的故事 (MobileSpace — A story about my passions) 我发现&#xff0c;学习和教授iOS开发的旅程 (My journey to discovering, learning, and teaching iOS development) “Let this be the first thing you hea…

Do you have an English name? 你有英文名吗?

文中提到的所有人名都是虚构的&#xff0c;如有雷同&#xff0c;纯属巧合。当然&#xff0c;你的洋名儿也可能是德文、法文、意大利文&#xff0c;等々々々。 全球化时代&#xff0c;和老外的交流也多了。“高端”的程序员想要进欧美系外企&#xff0c;想要出国看世界&#xff…