Problem_1015

题意:

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

解题思路:

这道题是很明显的贪心。只要每一周的生产成本最小,则给出的所有周的成本自然最小。第一周的需求量肯定是要第一周完成,以后的每一周需要和前一周的比较,看是这个周生产的划算,还是利用上一周生产划算。如果要在上一周把这一周的量生产出来,则成本要加上储存的费用。对酸奶构造一个结构体变量,包括酸奶的成本单价和当周的需求量。先把第一周的算出来,之后用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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值