P2896 [USACO08FEB]一起吃饭Eating Together 解题报告

题目传送门

题目不是很难,看了一会就想到了,但因为一些细节WA了好几遍qwq

但代码却一点一点压短了(看了别人的精简写法)

题目分析

把一个序列改成不上升或不下降子序列,求最少修改次数。

一般情况有求 LIS 和 LDS 的 O(nlogn)  做法,但由于本题只出现 1, 2, 3 三个数字,可进一步优化为O(n) 。

先考虑由 1 到 3 递增,递减反之

用 f[i][j] 表示前i个数,第 i 个数字是 j 的 最优解

有两种情况:

1、第 i 个与第 i-1 个数字一样

此时 f[i][j] = f[i-1][j];   if (a[i] != j) f[i][j]++;

简写 f[i][j] = f[i-1][j] + (a[i] != j);

2、第 i 个比 第 i-1 个大

又分 3 种:从 1 到 3, 从 2 到 3, 从1 到 2

在按降序做一遍,取最小值

注意

1、本题不一定要有 1、2、3 三种数字,可以只有几种(这就是我错的原因......)

2、1 后不一定是 2,可能直接到 3 

代码

#include <bits/stdc++.h>
using namespace std;
int n, a[30008], f1[30008][3], f2[30008][3];
int main() {scanf ("%d", &n);for (int i = 1; i <= n; i++)  scanf ("%d", a + i);for (int i = 1; i <= n; i++){f1[i][0] = f1[i-1][0] + (a[i] != 1); f1[i][1] = min (f1[i-1][1], f1[i-1][0]) + (a[i] != 2);f1[i][2] = min (f1[i][1] - (a[i] != 2), f1[i-1][2]) + (a[i] != 3);  //代码压缩后,没有那么一目了然,但还是比较好理解 }for (int i = 1; i <= n; i++){f2[i][0] = f2[i-1][0] + (a[i] != 3); f2[i][1] = min (f2[i-1][1], f2[i-1][0]) + (a[i] != 2);f2[i][2] = min (f2[i][1] - (a[i] != 2), f2[i-1][2]) + (a[i] != 1);}printf ("%d\n", min(min(f1[n][0], f2[n][0]), min(min(f1[n][1], f2[n][1]), min(f1[n][2], f2[n][2]))));//取 6 种情况的最小值 return 0;
}

  

 

转载于:https://www.cnblogs.com/whx666/p/11129807.html

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

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

相关文章

MySQL第五天

复制表结构 1 #从src_table复制到dst_table2 CREATETABLEdst_table LIKEsrc_table;3 4 #另外一种方法5 CREATETABLEdst_table SELECT*FROMsrc_table WHERE0;6 7 #第一种方法比第二种方法简单实用效率高8 9 10 #复制表中数据11 #完全复制src_table12 CREATETABLEdet_table SELEC…

九种跨域方式实现原理

前言 前后端数据交互经常会碰到请求跨域&#xff0c;什么是跨域&#xff0c;以及有哪几种跨域方式&#xff0c;这是本文要探讨的内容。 本文完整的源代码请猛戳github 博客 一、什么是跨域&#xff1f; 1.什么是同源策略及其限制内容&#xff1f; 同源策略是一种约定&#xff0…

WinForm控件之【LinkLabel】

基本介绍 超链接标签控件&#xff0c;随处可见应用极为广泛&#xff0c;一般用作触发指定链接跳转指定页面等操作。 常设置属性、事件 ActiveLinkColor&#xff1a;用户单击超链接时超链接显示的颜色&#xff1b; LinkColor&#xff1a;超链接默认状态时显示的颜色&#xff1b;…

Oracle分析函数六——数据分布函数及报表函数

Oracle分析函数——数据分布函数及报表函数 CUME_DIST 功能描述&#xff1a;计算一行在组中的相对位置&#xff0c;CUME_DIST总是返回大于0、小于或等于1的数&#xff0c;该数表示该行在N行中的位置。例如&#xff0c;在一个3行的组中&#xff0c;返回的累计分布值为1/3、2/3、…

Acess 数据库 查询数据表结构等问题小记

今天一次性解决三个小问题&#xff1a; 问题1&#xff1a;本机打开Access数据库老是提示&#xff1a;“Windows 正在配置 Microsoft Office Professional Edition 2003&#xff0c;请稍候” 解决办法&#xff1a; 手动更改注册表步骤操作&#xff1a; 1. 单击“开始”&#xff…

集合计数 (容斥原理)

心路: { 想了个思路打出来硬干掉了样例&#xff0c;然后发现是错的....当时直接崩了...烦躁滴很...其实这个思路和题解大方向上是一样的&#xff0c;想到了用至少含k个的方案数减去含k1个的加上k2的。。。 然后再想怎么求至少含k个的方案数想到了让集合含这k个数然后随机组就行…

codeforces-1176 (div3)

打div3翻车了 A.第一个操作是除二&#xff0c;第二个操作视为两下操作之后除三&#xff0c;第三个操作视为三下操作之后除五&#xff0c;直接计算贡献 #include <map> #include <set> #include <ctime> #include <cmath> #include <queue> #incl…

微软CRM 2011 Beta 新功能之二:不同组织不同基本语言

微软CRM 4.0就开始提供对多语言的支持&#xff0c;在安装微软CRM 4.0时需要选择不同语言的安装程序&#xff0c;安装完成后该部署服务器上默认组织以及任何新建组织的基本语言跟安装程序的语言一致。虽然我们可以在服务器上安装多个语言包&#xff0c;使用户可以选择要使用的语…

php教育项目,六星教育:如何在PHP项目实战中取胜,获得腾讯等大厂的offer

原标题&#xff1a;六星教育&#xff1a;如何在PHP项目实战中取胜&#xff0c;获得腾讯等大厂的offer我们在进行PHP学习的时候&#xff0c;总会强调实战的重要性。事实也是如此&#xff0c;如果光知道理论知识&#xff0c;而缺乏实际项目的参与与运作&#xff0c;就会变得纸上谈…

u盘运行linux系统卡住了,从U盘运行Linux操作系统的三种方法

从U盘运行Linux操作系统的三种方法你或许听说过在U盘上运行live Linux操作系统&#xff0c;但你知不知道可以永久的保存运行时的数据&#xff0c;或者直接将Linux安装到U盘&#xff1f;本文将介绍把Linux装进口袋(U盘)的三种方法&#xff0c;挑一种你最喜欢的方法吧&#xff01…

linux分区从1开始,Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作&#xff0c;以至于后期&#xff0c;不了解什么是分区以及分区当中最基本的一些概念&#xff0c;我们不说最细的知识&#xff0c;只求了解这个过程&#xff0c;那直接步入正题&#xff0c;开始第一节的学习。开…

理解Javascript_02_理解undefined和null

来自普遍的回答: 其实在 ECMAScript 的原始类型中&#xff0c;是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值&#xff0c;即undefined 和 null。 值 undefined 实际上是从值 null 派生来的&#xff0c;因此 ECMAScript 把它们定义为相等的&#…

《图解CSS3:核心技术与案例实战》

《图解CSS3&#xff1a;核心技术与案例实战》 基本信息 作者&#xff1a; 大漠 丛书名&#xff1a; Web开发技术丛书 出版社&#xff1a;机械工业出版社 ISBN&#xff1a;9787111469209 上架时间&#xff1a;2014-7-2 出版日期&#xff1a;2014 年7月 开本&#xff1a;16开 …

kali linux重启网络服务报错,Web安全学习笔记之在Kali Linux上安装Openvas以及启动失败修复...

现在用的kali linux是2018.1的版本&#xff0c;在安装openvas的时候报错&#xff0c;无法通过网络下载和安装openvas。主要错误是源配置错误&#xff0c;可能现在用的kali很久没更新了。一、解决和配置更新源问题apt-get upgrade报错显示无法更新&#xff0c;apt-get install o…

Rstudio调用plot()函数时,出现错误的处理方法

按照书上的例子敲出代码后&#xff0c;发现Rstudio无法识别C盘user文件夹下的中文用户名。如下图所示&#xff1a; 按照网上的做法&#xff0c;尝试修改计算机user下的用户名&#xff0c;没修改成功。 另一种做法是在plot()函数前面加上一句dev.new(),便可绘制成功&#xff0c;…

linux火狐浏览器49.0安装教程,火狐浏览器Linux最新版下载

火狐浏览器是一款免费开源的跨平台浏览器&#xff0c;firefox for linux引入了扩展同步机制用户能够在家用电脑和办公电脑之间进行无缝同步&#xff0c;能给用户更为流畅和高速的上网浏览体验&#xff0c;同时也让开发者能够开发出更为快速的网络应用和网站&#xff0c;有需要的…

PPA格式Linux安装,Ubuntu12.04 用PPA安装fcitx和搜狗输入法附加组件Linux版

最近Linux的世界中&#xff0c;让人兴奋的就是LinuxDeepin12.1 Beta的发布&#xff0c;但最让人欢喜的就是随之而来的”搜狗输入法Linux版“。网上流传的在Ubuntu下安装搜狗输入法的方法实在是恼人&#xff0c;不仅安装的deb包包多多&#xff0c;而且不能apt-get update 更新。…

Windows Server 2008 系统上c#读取Excel遭遇“用户代码未处理 ComException”错误

以前用代码读取Excel的时候从没有遇到过此错误&#xff0c;开始以为是权限问题&#xff0c;但是用普通的Console Application时却能够读取&#xff0c;放到web application里面就出现此错误&#xff1a; 导致错误的是第三行&#xff1a; object missing Missing.Value;Excel.A…

linux dialog 源码,Linux dialog详解(图形化shell)

4.密码框格式&#xff1a;dialog --passwordbox text height width [init]例子&#xff1a;12# dialog --title "Password" --passwordbox \"Please give a password for the new user:"1035这样我们的密码就暴露出来了&#xff0c;是不是很不安全&#…

ubifs开销测试

问题 在板子上观察到56M的ubi卷&#xff0c;挂载上ubifs之后&#xff0c;df -h显示可用空间约为50M。 如此计算开销超过了10%&#xff0c;那么这个开销随容量如何变化呢&#xff0c;是固定为10%吗还是有其他规律&#xff1f; 理论计算 简单查了下资料&#xff0c;没找到明确的计…