原题链接:POJ—2393
原题大意:一个奶酪厂,在接下来的N个星期内需要生产奶酪,每周的奶酪的生产成本和需求量都在不断变化。在第i周每生产一单位的奶酪需要Ci元,奶酪的需求量为Si。此外工厂有一个仓库可以无限量的保存奶酪,且不会变质,每单位奶酪保存一周需要S元。问奶酪厂要想完成生产任务,最小的成本是多少?
题目解法:贪心更新每周的生产成本即可,即从第二周开始逐个判断。即先判断C[0]+s<C[1]是否成立,若成立则说明在第一周先生产出来第二周的,再保存到第二周再卖的成本比较小,所以第二周的最小生产成本即更新为C[0]+s。然后再用第二周的最小成本来更新第三周的最小成本,因为第二周已经是最小成本,所以在更新第三周的时候就不再用第一周了,因为C[0]+2*s<C[1]+s是不可能发生的,因为早已经更新了C[1],以此类推,所以在更新第i周的最小成本时,用第i-1周的更新即可。
题目代码:
#include<stdio.h>
int main()
{
int n,s;//n即n周,s即存储价格
int suit[10010][2];//suit[i][0]用来储存第i周的成本,suit[i][1]用来储存第i周的成本
int cost[10010];//用来储存第i周的最小成本
long long all=0;//最终的最小成本,即输出答案
scanf("%d%d",&n,&s);
int i;
for(i=0;i<n;i++)
{
scanf("%d%d",&suit[i][0],&suit[i][1]);
}
cost[0]=suit[0][0];
for(i=1;i<n;i++)//更新最小成本
{
if(cost[i-1]+s<suit[i][0])
cost[i]=cost[i-1]+s;
else
cost[i]=suit[i][0];
}
for(i=0;i<n;i++)
all+=cost[i]*suit[i][1];
printf("%lld\n",all);
return 0;
}
欢迎留言哦!