C. Heidi and Library 题意 有 n 种分别具有价格 b 的书 a ,图书馆里最多同时存放 k 本书,已知接下来 n 天每天都有一个人来看某一本书,如果图书馆里没有则需要购买,问最少花费多少钱. 分析 这道题的一个简单版本 ,默认所有书价格为1,那么只需要用 set 维护一下,当图书馆内库存满的时候 erase 掉距离最大的书(贪心做法). 但是有了价格之后,就不能贪心了,然后这道题就可以用神奇的网络流解决.准确的说是最小费用最大流. 所有边的容量为 1,将 n 个点拆成 2n…
[CF802C]Heidi and Library(网络流) 题面 CF 洛谷 题解 前面两个Easy和Medium都是什么鬼玩意啊.... 不难发现如果这天的要求就是第\(a_i\)种书的话,那么\(a_i\)是必定要存在的. 把每种书拆\(n\)次,然后用每一个流维护一个书架上的位置,那么这样子很容易就可以连出费用流的建图. 但是这样子点数是平方级别,边数是三方级别. 实际上书架上的位置是无序的,因此并不需要全部建出来,只需要考虑在哪些天会被替换. 考虑每本书下一次在什么情况下会被使用,被使…
题面 CF802C Heidi and Library (hard) 有一个大小为 \(k\) 的空书架.有 \(n\) 天和 \(n\) 种书,每天要求书架中有书 \(a_i\).每天可以多次买书,买书 \(i\) 的价格为 \(c_i\).每天可以扔书(因为书架满了).求满足要求的最小代价. 数据范围:\(1\le n,k\le 80\). 路标 很明显这是一道套路烂大街的水题,但是今天蒟蒻想讲 \(3\) 种巧妙的做法. 此题的输出方案版:CF132E Bits of merry old…
LINK:Heidi and Library 先说一下简单版本的 就是权值都为1. 一直无脑加书 然后发现会引起冲突,可以发现此时需要扔掉一本书. 扔掉的话 可以考虑扔掉哪一本是最优的 可以发现扔掉nex越靠后的结果不会更差. 所以用set/堆维护一下nex的最大值 每次扔掉即可. code //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<ctime> #inclu…
[CF802C]Heidi and Library (hard) 题意:有n个人依次来借书,第i人来的时候要求书店里必须有种类为ai的书,种类为i的书要花费ci块钱购入.而书店的容量只有k,多余的书只能丢弃.现在让你安排哪天买哪本书放到书店的哪个位置,使得在满足所有人的情况下总花费最少. $n,k\le 80,c_i\le 10^6$ 题解:最小费用最大流,直接上建图方法: 建两排点i和i'. S -> i 流量1,费用$c_{a_i}$i -> i' 流量1,费用$-inf$i' ->…
A. Heidi and Library (easy) time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Your search for Heidi is over – you finally found her at a library, dressed up as a human. In fact, she has spen…
http://codeforces.com/contest/802/problem/C…
http://codeforces.com/contest/802/problem/C…
神奇的建模...原题链接 如果你真的把交换看成交换,就\(GG\)了.首先我们要把交换看成是白棋的移动. 然后,很容易的就想到建模的大致思路:建立超级源点S和超级汇点T,从S向初始局面每个白棋所在的格子连边,从目标局面每个白棋所在的格子向T连边,在相邻的格子中间加一些有限制的边,跑一波费用流. 那中间的那些边应该怎么加呢,先考虑把每个格子拆成两个点,中间连一条以交换次数为流量上限的边.但是这样会有问题,考虑某个白棋移动路径上的点,其实只有开头的格子交换了一次,中间的都是两次.只拆两个体现不了在中…
题目链接 复习了下餐巾计划问题.全忘了=-= 首先这是一道网络流.然后本题有\(n\)种建图方法,以及\(smy\) dalao还有单纯形做法. 先假设所有物品都是买入的.那么对于每一天,拆成两个点\(i,i'\),\(S\to i\)连边\((1,cost_{a_i})\)(容量\(1\)费用\(cost_{a_i}\)),\(i'\to T\)连边\((1,0)\),\(i\to i'\)连边\((1,0)\).这样就能满足一些基本要求了. 然后考虑可以把某个\(a_i\)留到之后一天.考虑…