P2837 晚餐队列安排
此题可能用动规不太好做,主要是状态转移方程很难想个人认为,思维发散的大佬们忽视。
我看了这位大佬的 dp 题解后才想到了方程,在此受我一膜%%%
嗯,说下思路:
先用 a [ i ] 数组存一下输入的编号;
然后用二维数组 dp [ i ][ 0/1 ] 来表示当前第 i 头奶牛的编号改成 1 或 2 所用的最少次数(0 表示改成 1,1 表示改成 2)
当然要考虑当前第 i 的奶牛的编号是 1 还是 2;
重点来了!!!
如果是 1 ,那么 dp [ i ][ 0 ] = dp [ i-1 ][ 0 ];dp [ i ][ 1 ] = min ( dp [ i-1 ][ 0 ],dp [ i-1 ][ 1 ] ) + 1;
说一下啥意思:当前第 i 头奶牛的编号为 1,那么将这头奶牛的编号改为 1(其实不用改)的最小次数就是第 i - 1 头奶牛的编号改成 1 的最小次数,因为你必须保证前面的编号都为 1;
如果将这头奶牛的编号改成 2(这时候就要改了,所以后面要 +1)的最小次数就是第 i-1 头奶牛的编号改成 1 或 2 的最小次数,因为编号是 2 不能保证前面的编号是 1 还是 2,所以要求最小值;
同理,如果是 2 那么 dp [ i ][ 0 ] = dp [ i-1 ][ 0 ] + 1;dp [ i ][ 1 ] = min ( dp [ i-1 ][ 0 ],dp [ i-1 ][ 1 ] );
此时 +1 就挪到了第一个状态转移方程里,因为 2 改成 1 次数要 +1 是吧。
终于搞完了状态转移方程,这个题可以结束了吧?
边界条件.......
想当然边界条件就是 dp [ 1 ][ 0 ] 和 dp [ 1 ][ 1 ] 了
所以我们只要来个 dp [ 1 ][ 2 - a [ 1 ] ] = 1;dp [ 1 ][ a [ 1 ] - 1 ] =0;
就能完美的解决 a [ 1 ] = 1 或 2 的赋值情况了qwq
好了,下面上 AC 代码:
#include<iostream>
#include<cstdio>
#include<math.h>
#include<cmath>
using namespace std;
int n,a[],dp[][]; //a数组存放每头奶牛的编号,dp数组来求第i头奶牛改成1或2所用的最少次数
int main()
{
cin>>n;
for(int i=; i<=n; i++) cin>>a[i];
dp[][a[]-]=; //完美得处理了a[1]=1或2的不同情况
dp[][-a[]]=;
for(int i=; i<=n; i++)
{ //从2开始,因为1我们已经处理了
if(a[i]==)
{ //分类讨论
dp[i][]=dp[i-][]; //重点的转移方程,没看懂请看上面详细解析
dp[i][]=min(dp[i-][],dp[i-][])+;
}
if(a[i]==)
{
dp[i][]=dp[i-][]+; //与a[i]==1类似
dp[i][]=min(dp[i-][],dp[i-][]);
}
}
cout<<min(dp[n][],dp[n][]); //输出最小值
return ;
}
完结撒花 φ(≧ω≦*)♪
P2837 晚餐队列安排的更多相关文章
- 洛谷 P2837 晚餐队列安排
P2837 晚餐队列安排 题目背景 Usaco Feb08 Bronze 题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐 ...
- P2837晚餐队列安排
传送 特写此篇,纪念不用dp做dp题 洛谷说这是个dp,但我不信(其实就是不会dp),因此我们考虑用另一种思路.修改后的队列每一个 数a[i]一定满足a[i]<=a[i+1],那修改后的顺序就是 ...
- 【洛谷p2837】晚餐队列安排
(一定要先贴一下wz大佬对这道题的定位:) 另外说一句:我终于在拖了nnnnnnnnn天之后做完了这道题 算法标签:(其实也用不到辽上面都有)但我就是要贴一下咬我啊) 好啦好啦,上 思路: 首先为了节 ...
- [Luogu 1160] 队列安排
Luogu 1160 队列安排 链表H2O H2O H2O模板. 太久不写链表,忘干净了,竟调了半个晚上. 保留备用. #include <cstdio> #include <cst ...
- AC日记——队列安排 洛谷 P1160
队列安排 思路: 链表裸题: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> usi ...
- luogu P1160 队列安排
二次联通门 :luogu P1160 队列安排 /* luogu P1160 队列安排 链表 手动模拟一下就好了... */ #include <cstdio> #define Max 5 ...
- luoguP1160 队列安排 x
P1160 队列安排 982通过 2.3K提交 题目提供者 该用户不存在 标签 云端 难度 普及/提高- 时空限制 1s / 128MB 题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为 ...
- 洛谷 P1160 队列安排 Label:链表 数据结构
题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...
- 洛谷 P1160 队列安排
题目描述 一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1-N$ ,他采取如下的方法: 先将 111 号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N 号同学依次入列, ...
随机推荐
- 开源ERP-成功案例分析(3)
Odoo用户概要 关于Odoo全球的用户,我们来看一些数据: Odoo目前全球有300万使用者 Odoo系统上每天新创建的数据库超过1000个 Odoo和Word.Excel.PowerPoint一样 ...
- electron入坑指南
electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...
- C#List<object>排序
//定义一个集合 var list = new List<Object>();//这里的Object为对象类型 //假设list已经有数据存进去,根据对象的某个字段升序或降序 var or ...
- [20190402]Library Cache mutex.txt
[20190402]Library Cache mutex.txt 1.环境:SCOTT@book> @ ver1PORT_STRING VERSION ...
- Tomcat开启SSL协议支持
一.生成keyStore 要使用ssl connector,必须先创建一个keystore.他包含了服务器中被客户端用于验证服务器的数字证书.一旦客户端接受了这个证书,客户端就可以使用public k ...
- Hystrix是个什么玩意儿
1. 什么是Hystrix Hystrix是Netflix的一个开源框架,地址如下:https://github.com/Netflix/Hystrix 中文名为“豪猪”,即平时很温顺,在感受到危险的 ...
- 慢日志查询python flask sqlalchemy慢日志记录
engine = create_engine(ProdConfig.SQLALCHEMY_DATABASE_URI, echo=True) app = Flask(__name__) app.conf ...
- jdk 环境变量
1. jdk安装后的目录 2.JAVA_HOME C:\Program Files\Java\jdk1.8.0_172 3.PATH %JAVA_HOME%\bin 4.CLASSPATH .;%JA ...
- Nginx(四)------nginx 负载均衡
在上一篇博客我们介绍了 Nginx 一个很重要的功能——代理,包括正向代理和反向代理.这两个代理的核心区别是:正向代理代理的是客户端,而反向代理代理的是服务器.其中我们又重点介绍了反向代理,以及如何通 ...
- mongo分片集群部署
测试环境192.168.56.101-213 前期准备: openssl rand -base64 756 > /home/software/mongodb/mongodbkey chmod ...