1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1616  Solved: 989
[Submit][Status][Discuss]

Description

为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐。每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2批就餐的奶牛了。由于奶牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦。 第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 3)的卡片。虽然所有N(1 <= N <= 30,000)头奶牛排成了很整齐的队伍但谁都看得出来,卡片上的号码是完全杂乱无章的。 在若干次混乱的重新排队后,FJ找到了一种简单些的方法:奶牛们不动,他沿着队伍从头到尾走一遍把那些他认为排错队的奶牛卡片上的编号改掉,最终得到一个他想要的每个组中的奶牛都站在一起的队列,例如111222333或者333222111。哦,你也发现了,FJ不反对一条前后颠倒的队列,那样他可以让所有奶牛向后转,然后按正常顺序进入餐厅。 你也晓得,FJ是个很懒的人。他想知道,如果他想达到目的,那么他最少得改多少头奶牛卡片上的编号。所有奶牛在FJ改卡片编号的时候,都不会挪位置。

Input

第1行: 1个整数:N 第2..N+1行: 第i+1行是1个整数,为第i头奶牛的用餐批次D_i

Output

第1行: 输出1个整数,为FJ最少要改几头奶牛卡片上的编号,才能让编号变成他设想中的样子

Sample Input

5
1
3
2
1
1

Sample Output

1

很简单的DP

dp[i][j]表示遍历完前i头牛第i头牛的编号为j的最小更改次数

正着来一次,把数组反过来再来一次

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[30005], dp[30005][4];
int Jud(int n)
{int i, j, k;memset(dp, 62, sizeof(dp));for(i=1;i<=3;i++){if(a[1]!=i)dp[1][i] = 1;elsedp[1][i] = 0;}for(i=2;i<=n;i++){for(j=1;j<=3;j++){for(k=1;k<=j;k++){if(a[i]==j)dp[i][j] = min(dp[i][j], dp[i-1][k]);elsedp[i][j] = min(dp[i][j], dp[i-1][k]+1);}}}return min(dp[n][1], min(dp[n][2], dp[n][3]));
}
int main(void)
{int n, i, ans;while(scanf("%d", &n)!=EOF){for(i=1;i<=n;i++)scanf("%d", &a[i]);ans = Jud(n);for(i=1;i<=n/2;i++)swap(a[i], a[n-i+1]);ans = min(ans, Jud(n));printf("%d\n", ans);}return 0;
}

bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)相关推荐

  1. [BZOJ] 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1646  Solv ...

  2. BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1609 题意: 给你一个只由数字"1,2,3"组成的序列a[i],共n个 ...

  3. 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1010  Solv ...

  4. [Usaco2008 Feb]Eating Together麻烦的聚餐

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

  5. [Usaco2008 Feb]Eating Together麻烦的聚餐[最长不下降子序列]

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

  6. [BZOJ] 1610: [Usaco2008 Feb]Line连线游戏

    1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 2264  Solved: 1017 [Sub ...

  7. bzoj 1611: [Usaco2008 Feb]Meteor Shower流星雨(DP)

    1611: [Usaco2008 Feb]Meteor Shower流星雨 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1631  Solved: 6 ...

  8. bzoj 1610: [Usaco2008 Feb]Line连线游戏

    1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 2235  Solved: 997 [Subm ...

  9. bzoj 3367: [Usaco2004 Feb]The Big Game 球赛(DP)

    3367: [Usaco2004 Feb]The Big Game 球赛 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 56  Solved: 45 ...

最新文章

  1. el图片滚动_element的el-table中记录滚动条位置的示例代码
  2. 一个div 上下两行_用 Python 撸一个 Web 服务器第4章:动态渲染数据
  3. 线性判别分析LDA的数学原理(二)
  4. 【Linux】一步一步学Linux——crontab命令(132)
  5. mybatis-plus的概念
  6. web 项目集成福昕_项目学生:Web服务集成
  7. caffe 图片数据的转换成lmdb和数据集均值(转)
  8. vs2015编译ffmpeg
  9. arduino 上传项目出错_活动回顾 | 续报率80%的Arduino试听课,确定不来看看吗?
  10. 【数字信号调制】基于matlab GUI PCM编码调制【含Matlab源码 453期】
  11. html页面分页显示问题,HTML分页,显示分页页面内容
  12. 独木舟上的旅行java_南阳ACM 题目71:独木舟上的旅行 Java版
  13. Excel整行数据自动标颜色
  14. h5页面如何预览excel文件_kintone excel预览插件
  15. 进入人工智能行业有哪些方法?
  16. javax,java
  17. java基础笔记05~汪汪汪~
  18. jdk-7u80-linux-i586.tar.gz
  19. pdf 卖肯锡_麦肯锡管理必读
  20. 哈工大软件构造Lab1(2022)

热门文章

  1. python自学行吗-没有编程基础,可以自学Python吗?
  2. python编程入门 适合于零基础朋友-[零基础学python]复习if语句
  3. 自学python考哪些证书-Python自学难吗?有哪些课程内容?
  4. IBM 语音识别输入系统
  5. 数字语音识别 - 源码下载|数值算法/人工智能|matlab例程|源代码 - 源码中国
  6. java hash简易_Java手写简易版HashMap的使用(存储+查找)
  7. lsdyna如何设置set中的node_list_详解MySQL数据库如何实现类似Oracle的序列?
  8. php怎么输出汉字大写的时间,php汉字转首字母大写的方法是什么
  9. 【MYSQL快速入门】常用函数:日期函数
  10. FFmpeg源代码简单分析:av_write_trailer()