洛谷 P1023 税收与补贴问题

题目

你是某家咨询公司的项目经理,现在你已经知道政府对某种商品的预期价格,以及在各种价位上的销售情况。要求你确定政府对此商品是应收税还是补贴的最少金额(也为整数),才能使商家在这样一种政府预期的价格上,获取相对其他价位上的最大总利润。

总利润=单位商品利润*销量

单位商品利润=单位商品价格 - 单位商品成本 (- 税金 or + 补贴)
https://www.luogu.org/problem/show?pid=1023

题解

模拟,很烦的模拟
以下摘自洛谷P1023 varvar 编辑的题解
我先来说说题目的意思。就从样例开始分析。

输入是:

31 28 130 30 120 31 110 -1 -1 15

意思就是政府预期价是31元。成本28元,按成本销售的时候可以买130件产品。

每个卖30元的时候可以卖120个,

每个卖31元(输入的最高价位)的时候可以卖110个,

每个卖32元的时候可以卖:110-15=95个。

每个卖33元的时候可以卖:110-15-15=80个。

每个卖34元的时候可以卖:110-15-15-15=65个。

… 因为“相邻价位之间的销量变化是均匀的”,因此28元卖130个,30元卖120个就可以知道

29元卖125个(平均每元减少的销量是(130-120) div (30-28)=5)

输出是4,我们来解释一下为什么是4。

4代表补贴是4元,所以:

在卖28元的时候,总利润是:(28-28+4)*130=520元,

在卖29元的时候,总利润是:(29-28+4)*125=625元,

在卖30元的时候,总利润是:(30-28+4)*120=720元,

在卖31元的时候,总利润是:(31-28+4)*110=770元,

在卖32元的时候,总利润是:(32-28+4)*95=760元,

… 在卖38元的时候,总利润是:(38-28+4)*5=70元,

显然可能的价位就是28~38了。(不能低于成本,卖39的时候销售量就是负数了)

可以看出,现在卖31元最划算,所以人们都愿意卖31元,这样一来不就达到政府的目的了吗!!

而当补贴是0,1,2,3的时候卖31元并不是最划算的,政府的目的达不到,你当然就没有分啦!

题意清楚了吗?好,下面分析思路。

穷举显然可以,但是没有什么意思,留给大家自己写。下面讲我的另外一种算法,数学味道要浓一些,

希望大家坚持看完。

由于需要N元钱最划算,相当于使N元钱的利润大于等于每种价格的利润。因此可以分别考虑。

设补贴为x,则N元钱的利润是:(p为成本)

(N-p+x)*d[N]=(N-p)*d[N]+x*d[N]

因此N元钱比M元钱划算的时候有:

(N-p)*d[N]+x*d[N]>=(M-p)*d[M]+x*d[M],即:

x(d[N]-d[M])>=M*d[M]-N*d[N]-p*(d[M]-d[N])

这样,要使N元钱比M元钱划算,x必须在区间[k1,k2] (k1,k2根据上面的式子得出)

例如上面的例子:

31元比28元划算时有:

(31-28+x)*110>=(28-28+x)*130

即:330+110x>=130x,故x<=16.5

31元比30元划算时有:

330+110x>=240+120x,故x<=9

31元比32元划算时有:

330+110x>=380+95x,故x>=3.33

… 最后所有式子取交集,就得到了x的范围。要求绝对值最小值还不容易吗? :-P

大家注意我在求出了k1,k2后做的最后的处理。可能有一边或两边无界的情况。

正数和负数的处理也有区别。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值