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,一经查实,立即删除!

相关文章

[html] 写出不定宽度的子级div,在相对于固定宽度的父级元素水平居中的布局

[html] 写出不定宽度的子级div&#xff0c;在相对于固定宽度的父级元素水平居中的布局 <div class"father"> <div class"son"></div> </div>.fateher { display:flex; algin-items: center; }个人简介 我是歌谣&#xff0c;欢迎…

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…

oracle存储过程更新权限不足,oracle创建存储过程时报权限不足

今天在自己的用的下创建了一个简单的存储过程做测试create or replace procedure hello isv_variable number(3);beginselect count(*)into v_variablefrom dual;dbms_output.put_line(‘the variable is’||v_variable);end hello;结果报错&#xff0c;我先检查了一下我用户的…

[html] 说说你对移动优先布局的理解

[html] 说说你对移动优先布局的理解 移动优先布局&#xff0c;应该是基于这样一个前提&#xff1a; 如今web页面的移动端用户量&#xff08;访问量&#xff09;要远远大于pc端等设备 所以是优先服务于移动端的 那么采用移动优先布局的策略才能最大化页面的使用 移动优先布局即…

关于TableView中图片的延时加载(转)

经常我们会用tableView显示很多条目, 有时候需要显示图片, 但是一次从服务器上取来所有图片对用户来浪费流量, 对服务器也是负担.最好是按需加载,即当该用户要浏览该条目时再去加载它的图片。重写如下方法- (void)tableView:(UITableView *)tableView willDisplayCell:(UITable…

oracle数据库视图有红叉,oracle触发器 前面的红叉是什么意思

一个触发器试图修改或查询目前正在触发器语句修改的表。建议改一下你的触发器逻辑。网上也有解释:error:ora-04091: table name is mutating, trigger/function may not see itcause:a statement executed a trigger or custom pl/sql function. that trigger/function tried t…

WinForm控件之【LinkLabel】

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

[html] 请使用一个div写出有三条横线的小图标

[html] 请使用一个div写出有三条横线的小图标 #menu{ width: 25px; height: 3px; border-top: 3px solid #0; border-bottom: 3px solid #0; padding: 5px 0; background-clip: content-box; background-color: #0; }个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…

WCF Basic(1)-操作重载

现网上关于WCF所谓是很多,但好书很少.Programming WCF Services 应该算是一本非常好的书。结合书和代码总结一下. 一.服务器端操作重载 1.接口本身支持重载interface ICalculator{int Add(int arg1, int arg2);double Add(double arg1, double arg2);} 2.若将此接口作为服务契约…

php cpu缓存 执行 代码,缓存PHP页面的代码,可以减轻CPU和MYSQL负担

/** 名称: 极光缓存** 作者: DCD* mail: haodan-_-b163.com** web开发群: 3574636* http://www.525ok.com** 完成日期: 2006-2-27** 版本&#xff1a;V1.00** 说明&#xff1a;** 缓存网页内容&#xff0c;减轻服务器CPU负荷&#xff0c;使用简便、灵活。* 本程序…

/etc/shadow文件

root:$6$r0DcB6cchtgqQqNP$UjLh8/5SB2ixbzLU10qYMpBP.NbOp/poyfzoGZFiEiVXO2lWABrB5SU/RWH/fDgkHzNYSKvfbbfpCZRkVBpFZ1::0:99999:7::: $6$开头的&#xff0c;表明是用SHA-512加密的 $r0DcB6cchtgqQqNP$这里中间表示盐 UjLh8/5SB2ixbzLU10qYMpBP.NbOp/poyfzoGZFiEiVXO2lWABrB5S…

[html] 使用div+css进行布局有什么好处?

[html] 使用divcss进行布局有什么好处&#xff1f; 我记得刚学的是时候&#xff0c;说最一开始用的是table去实现布局的。HTML语义标签还是挺多的&#xff0c;就是div打发好啊个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定…

oracle已经有了注释符再注释,关于oracle的注释位置

以前没有注意过这个问题,今天群里的朋友问了这个问题,发上来给大家看看:创建一个文件a.sql:select * from t2 start with root_id 0 connect by prior id root_id; /*zhushi*/到sqlplus中执行:SQL> a.sql3 ;select * from t2 start with root_id 0 connect by prior id…

[html] 如何根据设备尺寸做页面自适应?

[html] 如何根据设备尺寸做页面自适应&#xff1f; Mediaquery个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

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

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

Mac不装软件校验MD5和SHA1值

Mac 下校验下载的文件的方法是&#xff1a;打开 Terminal&#xff0c;即Mac 的命令行 MD5——md5&#xff1b;SHA1——shasum要校验Xcode6.4.dmg 的md5 与sha1 &#xff0c;只需要切换到对应的文件下&#xff0c;输入 &#xff1a;md5 Xcode6.4.dmg 就会输出对应的MD5 值shasum…

oracle索引使用例子,Oracle中利用函数索引处理数据倾斜案例

关于B-Tree、Bitmap、函数索引的相关内容请参考另一篇博文&#xff1a;Oracle中B-Tree、Bitmap和函数索引使用案例总结通常来说&#xff0c;索引选取的数据列最好为分散度高、选择性好。从索引树结构的角度看&#xff0c;列值都是分布在叶节点位置。这样&#xff0c;通过树结构…

[html] canvas生成图片有没有跨域问题?如果有如何解决?

[html] canvas生成图片有没有跨域问题&#xff1f;如果有如何解决&#xff1f; 前端设置 useCORS: true。后台配置允许跨域个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前…

什么是SSID/ESSID/BSSID

什么是SSID/ESSID/BSSID&#xff1f; SSID&#xff08;Service Set Identifier&#xff09;AP唯一的ID码&#xff0c;用来区分不同的网络&#xff0c;最多可以有32个字符&#xff0c;无线终端和AP的SSID必须相同方可通信。无线网卡设置了不同的SSID就可以进入不同网络&#xff…