CF799E Aquarium decoration——Chemist

题意:

cellur和Chemist要装修水族馆,他们一共有n种材料可供选择,一共需要买m种材料,每种材料有自己的价格c[i],他们想花费尽可能的少。同时在这n种材料中,有A种是cellur喜欢的,有B种是Chemist喜欢的,其中还有两人都喜欢的,其余部分为两人都不喜欢的,你需要满足在选择的m种材料中,Chemist和cellur喜欢的都不少于k种,求出最小花费。n<=200000,1<=m<=n,1<=k<=n,0<=c[i]<=1e9。

题目地址:https://www.luogu.org/problemnew/show/CF799E

分析:

题目需要满足两个条件:1.共买m种。2.每个人喜欢的不少于k种。考虑这两个条件,如果首先满足第二个条件,那么我只需要在剩下的材料中选择花费最小的,使总数达到m种即可,反之,如果首先满足第一个条件,那么第二个条件仍然很复杂不易满足,所以我们先考虑如何满足第一个条件。

第一个思路是DP,用f[i][j][k]表示买了i个A喜欢的,买了j个B喜欢的,买了k个A和B都喜欢的,由于无论怎么买都是从小往大买,所以这样的答案一定唯一。由f[i][j][k]可以转移到:1.f[i+1][j][k](买了一个A喜欢的B不喜欢的)2.f[i][j+1][k](买了一个B喜欢的A不喜欢的)3.f[i+1][j+1][k+1](买了一个A和B都喜欢的)。最后在dp[A][B][k:0~A&B都喜欢的个数]中去一个min,然后再考虑满足第一个条件即可。然而这样时间复杂度空间复杂度都无法承受,所以考虑其他算法。

第二个思路:在考虑满足第二个条件时枚举A和B都喜欢的买了i种,那么A和B各自喜欢的买了k-i种,都是从小到大买,因此可以先用前缀和预处理一下,直接O(1)算,之后再考虑满足第一个条件时,需要再买m-(2k-i)个材料,每次从四堆里没被选过的中选择最小的m-(2k-i)种,那么

猜你喜欢

转载自www.cnblogs.com/nopartyfoucaodong/p/9386746.html
799
今日推荐