wikioi 1016 税收与补贴 普及组 2000

原创 2013年12月01日 21:55:35

http://wikioi.com/problem/1016/

    每样商品的价格越低,其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递减。(我们假设价格及销售量都是整数)

 

    对于某些特殊商品,不可能完全由市场去调节其价格。这时候就需要政府以税收或补贴的方式来控制。(所谓税收或补贴就是对于每个产品收取或给予生产厂家固定金额的货币)

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

 也就是要是补贴或税收后使得预期价的利润最大(其他价格都小于预期价格)

并且我们要注意计算每个价位的销量


样例解释:
在卖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元,

include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int now;
struct goods{
    int p;
    int n;
}g[10000];//记录利润和销量
int x, n, cost;
void add(int a, int b)
 {
    g[now].p = (a);
    g[now].n = (b);
    now++;
}
void init()
{
    int i;
    int a, b;
    int c, d;
    int k, f;
    scanf("%d", &x);
    scanf("%d%d", &a, &b);
    cost = a;
    x -= cost;//每个都减少成本价
    while(scanf("%d%d", &c, &d)==2&&(c != -1 || d != -1))
	{
        k = (d - b) / (c - a);//计算线性
        f = d - c * k;//利润
        for(i = a; i <= c - 1; i++)
	{
            add(i - cost, k * i + f);//计算中间价格
        }
        a = c, b = d;
    }
    scanf("%d", &k);
    for(i = a; (b - (i - a) * k) > 0; i++)
	{
        add(i - cost, (b - (i - a) * k));//最高价后的价格
    	}
}

int main()
{
    int i, j;
    int a, b, k;
    double up = -100000, down = 1000000;
    init();
    for(i = 0; i < now; i++)
	{
        if(g[i].p == x)
	{
            n = g[i].n;
            break;
        }
    }
    for(i = 0; i < now; i++)
	{
        k = 1;//符号
        a = g[i].p * g[i].n - n * x;
        b = n - g[i].n;
        if(b < 0)
	{
            k = -1;
        }
        if(b != 0)//更新
	{        
            if(k == 1)
		{
                up = max(up, (double)a / b);
            }
            else
            {
                down = min(down, (double)a / b);
            }
        }
    }
    if(up <= down)
    {
        if(up > 0)
        {
            printf("%d\n", (int)ceil(up));
        }
        else
        {
            down = fabs(down);
            printf("%d\n", - (int)ceil(down));
        }
    }
    else//不可能
    {
        printf("NO SOLUTION\n");
    }
    return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NOIP 2000 普及组 复赛 税收与补贴问题

NOIP 2000 普及组 复赛 税收与补贴问题

CODE[VS] 1016 税收与补贴问题

CODE[VS] 1016

NOip2000税收与补贴问题

这是从http://www.blogbus.com/maoyu2010-logs/60816618.html看到的题解,但是刚开始有很多地方不明白,在这里帮大家理解一下。 原文: 首先,这题的本质...
  • yyyds
  • yyyds
  • 2016-08-15 20:23
  • 639

税收与补贴问题——数论

税收与补贴问题——数论

[Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

题目描述 Description 任何一个正整数都可以用2的幂次方表示. 例如:137=2^7+2^3+2^0 同时约定次方用括号来表示,即a^b可表示为a(b) 由此可知,137可...

wikioi 1017 乘积最大 (2000年NOIP全国联赛普及组NOIP全国联赛提高组)

题目描述 Description 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力...

[Wikioi 1009][NOIP 2002普及组]产生数

题目描述 Description   给出一个整数 n(n   规则:    一位数可变换成另一个一位数:    规则的右部不能为零。   例如:n=234。有规则(k=2): ...

wikioi 1010 过河卒 (2002年NOIP全国联赛普及组)

题目描述 Description  如图,A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有...

NOIP2000普及组 计算器的改良 Codevs1015 字符串复杂处理

http://codevs.cn/problem/1015/ 题目大意:输入一个字符串,是一个一元一次方程。该方程只有整数、‘+’、‘-’、‘=’ 三个符号,其中‘-’既可以是负号也可以是减...

wikioi-天梯-普及一等-区间dp-1166:矩阵取数游戏

题目描述 Description 【问题描述】 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数。游戏规则如下: 1. 每次取数时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)