题解【G-Trading Cards】

题目链接

题解链接

P1 题目描述

大意:有n张牌,每张牌从商店卖出、买入价钱都是vi,hi代表你有没有这张白(1是有,0是无)
m套牌的组合,cj表第j套有多少张牌,wj表示第j套牌的价值
你想要的两套牌里重叠的部分牌,都只需要总共一张就行了,也就是你只需要考虑每张牌有无,而不需要考虑要多少张
问你最多能赚多少钱?

P2 新学知识

 图割介绍(虽然介绍的很详细,但好似算法有破绽???下面情况让其可能并不是最小这个条件,但如过加入每次先访问最小边,应当就对了,也不应当,还应当沉下心来继续学习)

 

 

P3 用到的模板

 

P4 题目思路

1.(pre)不能使用DP,因为如果当成背包问题来做,前面的套数的选择会影响后面的套数的profit和cost,前面不选的set到后面和另外的set拼凑就要选了,不满足“当前最优包括子最优这一条件”

2.由于卖出已拥有的卡片对答案没有影响(若需要已拥有的卡组成卡组,则收益为0,可以视作先卖出再买进,否则直接卖出),
所以我们先将所有的卡片卖给市场。
那么我们现在的卡片有两种状态:①要么还在市场里②要么买走这个卡和其他的卡组成卡组并卖给Jeremy
考虑将市场为源点,Jeremy为汇点,市场向每个卡片连一条容量为其价值的边
每个卡组向Jeremy连一条容量为其价值的边
那么删除市场连向卡片的边表示情况②
删除卡组和Jeremy的边表示不选这个卡组
化简题目给的式子,则有
收益=所拥有卡的价值和-买入卡的花费 + 选的卡组的价值和
     =所拥有卡的价值和-买入卡的花费 + 所有的卡组的价值和 - 不选的卡组的价值和
     =所拥有卡的价值和 + 所有的卡组的价值和 - (不选的卡组的价值和 + 买入卡的花费)
     =所拥有卡的价值和 + 所有的卡组的价值和 - (删除边使得源点和汇点不联通的价值和)
     =所拥有卡的价值和 + 所有的卡组的价值和 - 图的割
为了防止卡组和卡片的连边被删除,则卡片和卡组连一条∞的边
为了最大化收益,则收益 =所拥有卡的价值和 + 所有的卡组的价值和 - 图的最小割。
再学习图割,完美!

P5 代码解析

 

P6 奇怪的感悟们

 

over

posted @ 2021-07-20 19:46  bear_xin  阅读(11)  评论(0)    收藏  举报