P2837 晚餐队列安排
题目背景
Usaco Feb08 Bronze
题目描述
为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐。每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐的奶牛排在队尾,队伍的前半部分则由设定为第1批就餐的奶牛占据。由于奶牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦。 第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 2)的卡片。虽然所有N头奶牛排成了很整齐的队伍,但谁都看得出来,卡片上的号码是完全杂乱无章的。 在若干次混乱的重新排队后,FJ找到了一种简单些的方法:奶牛们不动,他沿着队伍从头到尾走一遍,把那些他认为排错队的奶牛卡片上的编号改掉,最终得到一个他想要的每个组中的奶牛都站在一起的队列,例如112222或111122。有的时候,FJ会把整个队列弄得只有1组奶牛(比方说,1111或222)。 你也晓得,FJ是个很懒的人。他想知道,如果他想达到目的,那么他最少得改多少头奶牛卡片上的编号。所有奶牛在FJ改卡片编号的时候,都不会挪位置。
输入输出格式
输入格式:
第1行: 1个整数:N * 第2..N+1行: 第i+1行是1个整数,为第i头奶牛的用餐批次D_i
输出格式:
一行: 输出1个整数,为FJ最少要改几头奶牛卡片上的编号,才能让编号变成他设想中的样子。
输入输出样例
7 2 1 1 1 2 2 1
2
5 2 2 1 2 2
1
说明
1 <= N <= 30000
用dp[i][j]表示枚举到第i头牛,将第i头牛的状态改为j+1所需要的最小方案数
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 using namespace std; 7 void read(int &n) 8 { 9 char c='+';int x=0;bool flag=0; 10 while(c<'0'||c>'9') 11 {c=getchar();if(c=='-')flag=1;} 12 while(c>='0'&&c<='9') 13 {x=x*10+(c-48);c=getchar();} 14 flag==1?n=-x:n=x; 15 } 16 int n; 17 int a[30001]; 18 int dp[30001][3]; 19 int main() 20 { 21 read(n); 22 for(int i=1;i<=n;i++) 23 read(a[i]); 24 if(a[1]==1) 25 { 26 dp[1][0]=0; 27 dp[1][1]=1;// 改成2 28 } 29 else 30 { 31 dp[1][1]=0; 32 dp[1][0]=1; 33 } 34 for(int i=2;i<=n;i++) 35 { 36 if(a[i]==1)// 当前是一 37 { 38 dp[i][0]=dp[i-1][0]; 39 dp[i][1]=min(dp[i-1][1],dp[i-1][0])+1; 40 // 需要改成2 41 } 42 else // 当前是2 43 { 44 dp[i][0]=dp[i-1][0]+1; 45 dp[i][1]=min(dp[i-1][1],dp[i-1][0]); 46 } 47 } 48 printf("%d",min(dp[n][0],dp[n][1])); 49 return 0; 50 }
P2837 晚餐队列安排相关推荐
- 晚餐队列安排‖(麻烦的聚餐)
描述 为了避免餐厅过分拥挤,FJ要求奶牛们分 33 批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第 33 批就餐的奶牛排在队尾,队伍的 前端由设定为第1批就餐的奶牛占据,中间的位 ...
- P1160 队列安排
队列安排 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1~N,他采取如下的方法: 先将111号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N号同学依次入列,编号为i的同 ...
- 洛谷P1160 队列安排 链表
洛谷P1160 队列安排 链表 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #i ...
- 洛谷-P1160 队列安排
题目 Problem Description 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次 ...
- P1160 队列安排 洛谷
https://www.luogu.org/problem/show?pid=1160 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进 ...
- 【Luogu1160】队列安排(双向链表)
problem n个人排队,先将1入队 依次指定编号2~n的站在前面某人的左边或右边 从队列中去掉m个人 solution codes #include<iostream> using n ...
- P1160 队列安排 链表
题目链接 因为有很多删除与插入的操作,所以用链表是最好的方法.一道基础的链表题,用stl自带的链表解决,第一次使用,记录迭代器下标还是第一次见到-.- #pragma comment (linker, ...
- Luogu P1160 【队列安排】
详细的链表讲解 很明显的一个链表裸题 和普通的链表有一个区别就是这个题 可以O(1)插入,O(1)查询 然后我们为了方便,采用双向链表,定义s.f作为指针数组 更详细的解释见代码 #include&l ...
- iOS Swift GCD 开发教程
本教程将带你详细了解 GCD 的概念和用法,通过文中的代码示例和附带的 Github 示例工程,可以进一步加深对这些概念的体会.附带的示例工程是一个完整可运行的 App 项目:DispatchQueu ...
最新文章
- 用户 ‘IIS APPPOOL\IdealTest‘ 登录失败解决方案
- 端口安全原理介绍及配置命令
- Linux 免密码sudo
- CF1131 G. Most Dangerous Shark(DP+单调栈优化)
- Netty工作笔记0033---Netty概述
- python的from_bytes属性_Python parse.quote_from_bytes方法代碼示例
- IE6之各种不适记录
- Java 测试 - 单元测试用例自动生成框架 EvoSuite
- 计算机常规教学ppt,计算机基本PPT教学.ppt
- 【评测】Attana Cell 200蛋白互作分析仪,实现细胞原位生物大分子互作检测
- python 实现省全称和省的简称互相转换
- ios系统访问ftp服务器,ios系统访问ftp服务器
- Hololens开发笔记_在Unity运行没问题,在Hololens跑出现PathNotFoundException:Could not find a part of path.
- linux open换行windows,python中遇到的Windows系统中换行符的一个坑
- 宜信智能监控平台建设实践|分享实录
- Errors报错记录
- IT新人到底该不该去外包公司?
- 回家,一朵花开的时间
- 解析几何:第四章 空间中的直线与平面(1)空间直线的方向、平面方程、空间直线方程
- 突变点检测:Pettitt突变点检测(python)