1.Supermarket(题目地址) 跟很久以前模拟的打地鼠那题一样,贪心+优先队列.这次换用并查集做法. 还是基于贪心,但这次换一种策略,先选价值最大的, 同时使其尽可能晚的被选上(因为早选会将之前可选的日子占用,很显然). 将并查集f[i]表示从第i天往前看最晚的空下来的一天. 初始时还是每个点(即每天)指向自己,选物品时从这天开始找father,即之前我们维护的东西. 找到后将祖先指向上一个集合中(可以脑袋里面想象一下),累计答案. 如果祖先为0,代表没有可选的日子了(想一想为什么).…
F - Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1456 Appoint description:  System Crawler  (2015-11-30) Description A supermarket has a set Prod of products on sale. It earns a p…
题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units starting from the moment the sale begins. Each product takes precisely o…
Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1456 Description A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx…
题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以改变的,求出最多可以卖多少钱. 解题思路:看了大牛的解释~.其实这道题是用贪心写的,这里并查集只是用来作为工具,使得速度更加快.贪心的写法是这样的,先把所有产品按照利润从大到小排序,然后这个把这个放在截止日期那天卖出,并做好标记,如果截至日期那天已经有其他产品占用了,那么可以把这个产品卖出的时间往前…
题目链接 原创的博客 题意: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. 每天只能卖一个商品. 现在你要让超市获得最大的利润. n , p[i], d[i] 范围都在10000以内 . #include<iostream> #include<cstdio> #include <cctype> #include<algorithm> #include<cstring> #include<c…
超市里有n个产品要卖,每个产品都有一个截至时间dx(从开始卖时算起),只有在这个截至时间之前才能卖出并且获得率润dy. 有多个产品,所有可以有不同的卖出顺序,每卖一个产品要占用1个单位的时间,问最多能卖出多少利润. A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an in…
题目链接:http://poj.org/problem?id=1456 题目大意: 有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售处,就能得到相应的利润,并且销售该商品需要1天时间. 问销售的最大利润.   我开始的代码:(贪心策略有问题,因为我当时以为过期时间短的商品要优先卖掉,实际上不是这样的) #include <cstdio> #include <cstring> #include <algorithm> using namespace…
这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连通块的边数大于n-1,则我们可以满足这个连通块的所有点. 定义b数组,每读入一个装备的两个属性x,y,令f1为x所在连通块的根节点,f2为y所在连通块的根节点. 若f1=f2:b[f1]=1: 若f1<f2:b[f1]=1,fa[f1]=f2: 若f2>f2:b[f2]=1,fa[f2]=f1.…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1854 分析:很裸的一道二分图匹配对吧,但是在hzwer的blog上看见神奇的并查集做法! 其实这题和bzoj1191惊人的相似! 把权值当作点,装备当作边,既然一个装备只能选择一个属性,也就是你要人为给边定向,箭头指到的点就表示你这个装备选的属性. 然后就和bzoj1191一样的了 如果一个集合里的点构成一个树,那么很显然,把那个权值最大的点作为根,除了根节点以外的点都可以选出,如果…