Problem_1015

来源:互联网 发布:建筑外观效果图软件 编辑:程序博客网 时间:2024/05/18 00:13

题意:

大体意思就是有一家酸奶工厂,给出每一周的酸奶需求量和这一周制造每升酸奶的价格,然后每一周的价格都不同,每一周可以无限的生产酸奶,多出当周需求量的可以存在仓库中(仓库无限大并且仓库永远不会变质),给出每升酸奶存放一周的价格。问:如何生产使得完成这些周的生产量所需的成本最小

解题思路:

这道题是很明显的贪心。只要每一周的生产成本最小,则给出的所有周的成本自然最小。第一周的需求量肯定是要第一周完成,以后的每一周需要和前一周的比较,看是这个周生产的划算,还是利用上一周生产划算。如果要在上一周把这一周的量生产出来,则成本要加上储存的费用。对酸奶构造一个结构体变量,包括酸奶的成本单价和当周的需求量。先把第一周的算出来,之后用for循环,把若本周生产需要的费用和上周生产需要的费用做比较,总费用加上小的那个。循环完毕之后返回总费用totalcost

感想:

这道题刚开始就没看明白,后来做了很多次,提交都没有通过,后来又看了一遍题目,发现题目后面有一句话说用32位的整数太小了,然后我才转用了long long类型,我之前做的思路是先把第一周的算出来,然后的几周分别和前面的几周做比较,从中找到一个最省钱的,但是这样的话提交就会超时,从百度上看只和前一周的比较就可以,但是我觉得既然是贪心,就要把前几周的一块比较,这样才能找到最省钱的一周。

代码如下:

#include<iostream>

#include<algorithm>

#include<cstdio>

using namespace std;

struct Yogurt

{

int Price;

int NeedQuantity;

};

int leastCost(int n,int a,Yogurt y[])//n:有几周   a:每升酸奶存放一周的价格   y数组从下标1开始

{

int TotalCost = 0;

TotalCost = TotalCost + y[1].Price*y[1].NeedQuantity;

for (int i = 2; i <=n; i++)

{

if ((y[i].Price*y[i].NeedQuantity) > (y[i - 1].Price*y[i].NeedQuantity + y[i].NeedQuantity*a))

TotalCost = TotalCost + y[i - 1].Price*y[i].NeedQuantity +y[i].NeedQuantity*a;

else

TotalCost = TotalCost + y[i].Price*y[i].NeedQuantity;

}

return TotalCost;

}

int main()

{

int weeks, StorePrice,TotalCost=0;

Yogurt y[10000];

cin >> weeks >> StorePrice;

for (int i = 1; i <= weeks; i++)

cin >> y[i].Price >> y[i].NeedQuantity;

TotalCost = leastCost(weeks, StorePrice, y);

cout << TotalCost << endl;

return 0;

}

0 0
原创粉丝点击