题意:一个奶牛场,第i个星期需要向外提供牛奶Yi升,第i星期生产牛奶的成本是Ci ,但是本星期提供的牛奶可以是前几个星期就生产好的的(放在仓库里,每单位升牛奶每周需要S元的成本费),问共N周,所花的最少费用。
思路:可以把存储在仓库的费用转化成那周的成本。假设S=5,第2周成本C2=80,第5周生产成本C5=100,如果要计算第5周的花费,(假如第5周的牛奶是从第2周来的),那么第2周的成本可以看作C_2+S*(5-2) =95,而第5周的成本是100元,这时我们就需要95的单价,而不是100的。这样想通之后,可以通过一个fee变量来表示本周及之前所有周所需要的最小单价,这样这周的花费就=fee*Yi。
#include<stdio.h>
int min(int a,int b)
{
return a>b?b:a;
}
int main(void)
{
int N,S,c,y,fee=1000000;//初始fee,以便第一次更新
long long int amountcost=0;
scanf("%d%d",&N,&S);
while(N--)
{
scanf("%d%d",&c,&y);
fee=min(fee+S,c); // 这周的最小单价=min(上周的最小单价+一周储存所需费用,这周的单价)
amountcost+=fee*y;
}
printf("%lld\n",amountcost);
}