题目背景

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最少要改几头奶牛卡片上的编号,才能让编号变成他设想中的样子。

输入输出样例

输入样例#1:

7
2
1
1
1
2
2
1

输出样例#1:

2

输入样例#2:

5
2
2
1
2
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 晚餐队列安排相关推荐

  1. 晚餐队列安排‖(麻烦的聚餐)

    描述 为了避免餐厅过分拥挤,FJ要求奶牛们分 33 批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第 33 批就餐的奶牛排在队尾,队伍的 前端由设定为第1批就餐的奶牛占据,中间的位 ...

  2. P1160 队列安排

    队列安排 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1~N,他采取如下的方法: 先将111号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N号同学依次入列,编号为i的同 ...

  3. 洛谷P1160 队列安排 链表

    洛谷P1160 队列安排   链表 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #i ...

  4. 洛谷-P1160 队列安排

    题目 Problem Description 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次 ...

  5. P1160 队列安排 洛谷

    https://www.luogu.org/problem/show?pid=1160 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进 ...

  6. 【Luogu1160】队列安排(双向链表)

    problem n个人排队,先将1入队 依次指定编号2~n的站在前面某人的左边或右边 从队列中去掉m个人 solution codes #include<iostream> using n ...

  7. P1160 队列安排 链表

    题目链接 因为有很多删除与插入的操作,所以用链表是最好的方法.一道基础的链表题,用stl自带的链表解决,第一次使用,记录迭代器下标还是第一次见到-.- #pragma comment (linker, ...

  8. Luogu P1160 【队列安排】

    详细的链表讲解 很明显的一个链表裸题 和普通的链表有一个区别就是这个题 可以O(1)插入,O(1)查询 然后我们为了方便,采用双向链表,定义s.f作为指针数组 更详细的解释见代码 #include&l ...

  9. iOS Swift GCD 开发教程

    本教程将带你详细了解 GCD 的概念和用法,通过文中的代码示例和附带的 Github 示例工程,可以进一步加深对这些概念的体会.附带的示例工程是一个完整可运行的 App 项目:DispatchQueu ...

最新文章

  1. 用户 ‘IIS APPPOOL\IdealTest‘ 登录失败解决方案
  2. 端口安全原理介绍及配置命令
  3. Linux 免密码sudo
  4. CF1131 G. Most Dangerous Shark(DP+单调栈优化)
  5. Netty工作笔记0033---Netty概述
  6. python的from_bytes属性_Python parse.quote_from_bytes方法代碼示例
  7. IE6之各种不适记录
  8. Java 测试 - 单元测试用例自动生成框架 EvoSuite
  9. 计算机常规教学ppt,计算机基本PPT教学.ppt
  10. 【评测】Attana Cell 200蛋白互作分析仪,实现细胞原位生物大分子互作检测
  11. python 实现省全称和省的简称互相转换
  12. ios系统访问ftp服务器,ios系统访问ftp服务器
  13. Hololens开发笔记_在Unity运行没问题,在Hololens跑出现PathNotFoundException:Could not find a part of path.
  14. linux open换行windows,python中遇到的Windows系统中换行符的一个坑
  15. 宜信智能监控平台建设实践|分享实录
  16. Errors报错记录
  17. IT新人到底该不该去外包公司?
  18. 回家,一朵花开的时间
  19. 解析几何:第四章 空间中的直线与平面(1)空间直线的方向、平面方程、空间直线方程
  20. 突变点检测:Pettitt突变点检测(python)

热门文章

  1. sql 找到最近的值_数据分析——SQL查询(常用函数)
  2. android 获取最近应用和全部应用_Android 黑科技之卸载系统应用
  3. 【NLP实战】如何基于Tensorflow搭建一个聊天机器人
  4. 深度学习之路孤单吗?我们带你进组织!
  5. Lua 通过 alien 库调用 zlib 压缩/解压
  6. 王侠对话农民丰收节交易会 万祥军:解读供销社服务平台
  7. 一个关于Integer的秘密
  8. IDEA新建spring boot项目没有Spring Initializr选项
  9. linux命令总结之traceroute命令
  10. 编程:利用杨辉三角形原理来计算组合数