首页 > TAG信息列表 > 打饭

洛谷P2157[SDOI2009]-学校食堂

\(f[i][j][k]\) 表示在第 \(1 \sim i-1\) 个人已经打完饭的情况下,第 \(i\) 个人以及 \(ta\) 后面的 \(7\) 个人是否打饭的状态为 \(j\),上一个打饭的人是第 \(i + k\) 个人 因为是十进制转二进制,所以二进制的最后一位是表示的是第 \(i\) 个人的状态 且 \(k\) 的取值范围是 \(-8 \l

并发编程——线程中sleep(),yield(),join(),wait(),notify(),notifyAll()区别

前言 今天简单的讲一讲线程中sleep(),join(),yield(),wait(),notify(),notifyAll()这些方法的使用以及区别。 不过在讲这些方法之前,需要简单的介绍一下锁池和等待池的概念。 专栏推荐: 并发编程专栏 锁池和等待池 1.锁池 所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁

面试被问公平锁和非公平锁,我竟用“排队打饭”解释得清清楚楚

简介 有个小伙伴最近咨询我,前段时间他被面试官问了synchronized是公平锁还是非公平锁?当时就蒙圈了,最后面试结果可想而知,今天我们就用一个通俗的案例加上代码来说明公平锁和非公平锁。其实公平锁这个概念是JUC工具包才有的,比如ReentrantLock才有公平锁的概念,这篇文章我们结合生活

队列的基本概念(考研)

王道考研笔记 知识总览: PS:数据结构三要素——逻辑结构,数据的运算,存储结构(物理结构)      队列的定义: 线性表时具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时线性表示一个空表。 若用L命名线性表,则一般表示为 栈(Stack)是只允许在一段进行插入或删除操作的线

洛谷P2577 [zjoi2004]午餐---贪心+dp

题目链接:https://www.luogu.com.cn/problem/P2577 简单题意:两个窗口打饭,每个人有打饭和吃饭时间,求最快全部吃完的时间 让吃饭时间长的先打饭,应该比较容易想到,不管窗口数量是多少。但是之后就开始胡乱设计状态了。一开始想了个sb状态:dp[i][1/2]表示轮到第i个人,选择窗口1/2的最小时

午餐

其实排队没有问题,很容易想到先按照吃饭时间排序,那么接下来的操作就很玄学了,我先想到的是吧他们分成两组,就相当于一个背包,但是因为背包容量实在是太大了,我们考虑优化,因为前 ii 个人打饭的总时间相同,那么总时间就是固定的,所以我们记录第一个窗口就 OK 了,第二个窗口就是 sum[i]

luogu2577 午餐

题目 题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂。这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭。由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的。另外每个人吃饭的速度也不尽相同,所以吃

P2577 [ZJOI2005]午餐[DP]

题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂。这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭。由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的。另外每个人吃饭的速度也不尽相同,所以吃饭花费

P2577 [ZJOI2005]午餐

神仙dp题。 先做一个贪心的排序:吃得慢的先去打饭。即按b从大到小排序。 接下来再做dp: 我们可以这么定义状态:\(dp[i][j][k]\)表示前\(i\)个人,第一队的人打饭用了\(j\)时间,第二队的人打饭用了\(k\)时间,再吃完饭的最少时间。 但是这样开的数组是\(200 \times 40000 \times 40000\),铁定

线程的理解和并发解决方案

一,并发和并行的区别 并行:同时做某些事,可以互不干扰的同一时刻做几件事(不一定同时)。并行:同一时刻做某些事,但是强调同一时刻做了几件事。 并发的解决方案 1,队列,缓冲区假设只有一个窗口,陆续进入食堂打饭,排队的人就是队列,先进先出,解决资源使用问题。排成的队列,就是缓冲区。 2,争抢 只