POJ 3670 Eating Together

POJ_3670

    由于递增和递减是类似的,下面不妨只讨论变成递增序列的情况。

    由于Di只有三个数,所以可以考虑将序列分割成三部分,第一部分全部变成1,第二部分全部变成2,第三部分全部变成3。然后我们枚举3开始的位置,这时一共有若干决策,要么前面的全部是1,要么前面有一段2,然后再前面有一段1或者没有,如果每种决策都考察一遍的话整体复杂度就要O(N^2)了,因此考虑优化一下。记当前的位置为i,1的最后一个位置为j,not1[k]表示k以及k之前不是1的数量,not2[k]表示k以及k之前不是2的数量,not3[k]表示k以及k之后不是3的数量,那么我们把决策表示成not2[i]+(not1[j]-not2[j])+not3[i+1],这样如果我们保留着前面所有j中not1[j]-not2[j]的最小值的话,就可以O(1)找到最优决策了。

    这个题目还有一个很好的思路就是直接求最长不降子序列,然后用N减去这个值,不过这样最好也只是O(NlogN)的复杂度。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXD 30010
#define INF 0x3f3f3f3f
int N, not3[MAXD], a[MAXD];
void init()
{int i;for(i = 1; i <= N; i ++) scanf("%d", &a[i]);
}
int deal()
{int i, not1, not2, ans, opt;not3[N + 1] = 0;for(i = N; i >= 1; i --) not3[i] = not3[i + 1] + (a[i] != 3);ans = not3[1], not1 = not2 = opt = 0;for(i = 1; i <= N; i ++){if(a[i] != 1) ++ not1;if(a[i] != 2) ++ not2;opt = std::min(opt, not1 - not2);ans = std::min(ans, not2 + opt + not3[i + 1]);}return ans;
}
void solve()
{int i, ans = deal();for(i = 1; i <= N / 2; i ++) std::swap(a[i], a[N - i + 1]);ans = std::min(ans, deal());printf("%d\n", ans);
}
int main()
{while(scanf("%d", &N) == 1){init();solve();}return 0;
}

 

 

 

转载于:https://www.cnblogs.com/staginner/archive/2012/09/28/2706920.html

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

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

相关文章

《MySQL——如何解决一主多从的读写分离的过期读问题》

目录两种架构两种架构特点强制走主库方案Sleep方案判断主备无延迟方案配合semi-sync等主库位点方案GTID方案两种架构 基于一主多从的读写分离&#xff0c;如何处理主备延迟导致的读写分离问题。 读写分离的主要目标&#xff1a;分摊主库压力。 有两种架构&#xff1a; 1、客…

json/ 发送形式_24/7的完整形式是什么?

json/ 发送形式24/7&#xff1a;二十四 (24/7: Twenty-Four Seven) 24/7 or 24-7 service, which generally marked "twenty-four seven" is service that is existing at any time and typically, every day in trade business and industry. Substitute orthograph…

《MySQL tips:并发查询与并发连接区别》

并发连接与并发查询&#xff0c;并不是一个概念。 在执行show processlist的结果里&#xff0c;看到了几千个连接&#xff0c;指的是并发连接。 而"当前正在执行"的语句&#xff0c;才是并发查询。 并发连接数多影响的是内存。 并发查询太高对CPU不利。一个机器的…

对上拉下拉电阻的作用作个总结(想了解的过来看看)(转载)

转自&#xff1a;http://www.amobbs.com/thread-5475279-1-3.html 一、定义&#xff1a;上拉就是将不确定的信号通过一个电阻嵌位在高电平&#xff01;电阻同时起限流作用&#xff01;下拉同理&#xff01;上拉是对器件注入电流&#xff0c;下拉是输出电流&#xff1b;弱强只是…

给用户传入的变量进行转义操作

先看代码实现&#xff1a; /* 对用户传入的变量进行转义操作。*/ if (!get_magic_quotes_gpc()) {if (!empty($_GET)){$_GET addslashes_deep($_GET);}if (!empty($_POST)){$_POST addslashes_deep($_POST);}$_COOKIE addslashes_deep($_COOKIE);$_REQUEST addslashes_…

《MySQL——外部检测与内部统计 判断 主库是否出现问题》

目录select1判断查表判断更新判断外部检测弊端内部统计一主一备的双M架构里&#xff0c;主备切换只需要把客户端流量切换到备库。 在一主多从的架构里&#xff0c;主备切换要把客户端流量切换到备库&#xff0c;也需要把从库接到新主库上。 切换有两种场景&#xff1a;1、主动…

NIM的完整形式是什么?

NIM&#xff1a;无内部消息 (NIM: No Internal Message) NIM is an abbreviation of "No Internal Message". NIM是“无内部消息”的缩写。 It is an expression, which is commonly used in the Gmail platform. It is written in the subject of the mail, if the…

[Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...

点击下载 ConvertJson.rar 本类实现了 C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json|等功能大家先预览一下 请看代码 /// <summary> /// 类说明&#xff1a;Assistant /// 编 码 人&#xff1a;苏飞 /// 联系方式&#xff1a;361983679 …

let 只能在严格模式下吗_LET的完整形式是什么?

let 只能在严格模式下吗LET&#xff1a;今天早早离开 (LET: Leaving Early Today) LET is an abbreviation of "Leaving Early Today". LET是“ Leaveing Today Today”的缩写 。 It is an expression, which is commonly used in the Gmail platform. It is writt…

js 遮罩层 loading 效果

//调用方法 //关闭事件<button οnclickLayerHide()>关闭</button>&#xff0c;在loadDiv(text)中&#xff0c;剔除出来 //调用LayerShow(text)&#xff0c;text为参数&#xff0c;可以写入想要写入的提示语 //本方法在调用时会自动生成一个添加到body的div&#x…

centos6.5安装配置LDAP服务[转]

centos6.5安装配置LDAP服务[转] 安装之前查一下 1find / -name openldap*centos6.4默认安装了LDAP&#xff0c;但没有装ldap-server和ldap-client 于是yum安装 1su root2yum install -y openldap openldap-servers openldap-clients不建议编译源码包&#xff0c;有依赖比较麻烦…

《MySQL——恢复数据-误删行、表、库》

目录误删行事前预防误删行数据方法误删表/库延迟复制备库事前预防误删库/表方法传统的架构不能预防误删数据&#xff0c;因为主库的一个drop table命令&#xff0c;会通过binlog传给所有从库和级联从库&#xff0c;进而导致整个集群的实例都会执行这个命令。 MySQL相关的误删除…

python图例位置_Python | 图例位置

python图例位置Legends are one of the key components of data visualization and plotting. Matplotlib can automatically define a position for a legend in addition to this, it allows us to locate it in our required positions. Following is the list of locations…

Freemarker中遍历List实例

Freemarker中如何遍历List摘要&#xff1a;在Freemarker应用中经常会遍历List获取需要的数据&#xff0c;并对需要的数据进行排序加工后呈现给用户。那么在Freemarker中如何遍历List&#xff0c;并对List中数据进行适当的排序呢&#xff1f;通过下文的介绍&#xff0c;相信您一…

工作总结:文件对话框的分类(C++)

原文地址&#xff1a;http://www.jizhuomi.com/software/173.html 文件对话框分为打开文件对话框和保存文件对话框&#xff0c;相信大家在Windows系统中经常见到这两种文件对话框。例如&#xff0c;很多编辑软件像记事本等都有“打开”选项&#xff0c;选择“打开”后会弹出一个…

《MySQL——Innodb改进LRU算法》

Innodb改进LRU.算法&#xff0c;实质上将内存链表分成两段。 靠近头部的young和靠近末尾的old&#xff0c;取5/12段为分界。 新数据在一定时间内只能在old段的头部&#xff0c;当在old段保持了一定的时间后被再次访问才能升级到young。 实质上是分了两段lru&#xff0c;这样做的…

nfc/nfc模式_NFC的完整形式是什么?

nfc/nfc模式NFC&#xff1a;没有进一步评论 (NFC: No Further Comment) NFC is an abbreviation of "No Further Comment". NFC是“没有进一步评论”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media networking s…

dx小记(2)

1.构造一个平截台体&#xff08;Frustum&#xff09; 最近距离-projMatirx.43/projMatrix.33 projMatrix。33 深度/&#xff08;深度-最近距离&#xff09; projMatrix。44-最近距离*&#xff08;深度/&#xff08;深度-最近距离&#xff09;&#xff09; FrustumMatrix proje…

jQuery: 整理4---创建元素和添加元素

1.创建元素&#xff1a;$("内容") const p "<p>这是一个p标签</p>" console.log(p)console.log($(p)) 2. 添加元素 2.1 前追加子元素 1. 指定元素.prepend(内容) -> 在指定元素的内部的最前面追加内容&#xff0c;内容可以是字符串、…

Design a high performance cache for multi-threaded environment

如何设计一个支持高并发的高性能缓存库 不 考虑并发情况下的缓存的设计大家应该都比较清楚&#xff0c;基本上就是用map/hashmap存储键值&#xff0c;然后用双向链表记录一个LRU来用于缓存的清理。这篇文章 应该是讲得很清楚http://timday.bitbucket.org/lru.html。但是考虑到高…