zoukankan      html  css  js  c++  java
  • 「UOJ495」新年的促销

    简要题意

    (n)个物品,每个物品有价格(p)和价值(w)两个属性。
    可以选一些物品买,然后给出两个正整数(a)(b):如果买了(k)个物品,最多还可以免费送(leftlfloor frac{k}{a} ight floor + leftlfloor frac{k}{a} ight floor)个物品。
    求出对于每一个(j in [1,m]),最多花费(j)元钱能得到的最大价值。

    题目解法(照搬官方题解

    考试的时候只想到了(60)分的(O(n^3m))(DP),之后还想了(O(n^3))的做法,发现不太行,就没搞了,看了题解,发现自己还是太菜了。

    我们考虑如果确定了要得到的物品集合,手中的(k)元钱是否够用。
    这是一个类似贪心的东西, 因为反正这些物品我们都是要全都得到的,所以我们可以按价格从低到高来买,能买就买,之后看一看剩下的能不能全都白送就好了。
    于是我们可以发现最优解一定是以某一个价格为界,低于这个价格的都是买的,高于这个价格的都是送的。
    那么我们就将这(n)个物品按照价格从低到高排序,设(f[i][j][k]) 表示前(i)个物品,花了(j)元钱,买了(k)个物品的最大收益,对于后面的(n-i)个物品,我们只要调价值大的送就好了。

    复杂度:(f)(O(n^2m))的,之后的贪心是(O(n^2log{n}))的。

  • 相关阅读:
    理解Linux 的CPU Load和CPU利用率
    Linux进程和信号超详细分析
    Linux 磁盘配额
    linux磁盘阵列raid详解
    Linux LVM管理
    Linux fstab文件详解
    Linux 磁盘管理
    sourceTree的使用
    Logstash 参考指南(Kafka输入插件)
    ELK的一次吞吐量优化
  • 原文地址:https://www.cnblogs.com/tacmon52818/p/12713086.html
Copyright © 2011-2022 走看看