编程训练1-每天吃鸡蛋花费最少问题

明明每天必须吃一个鸡蛋,出门旅游也不例外,他正计划与家人乘坐房车去n个城市旅游,旅游城市的顺序和行程已经确定,每天去一个城市,第一天去1号城市,第二天去二号城市…第n天去n号城市。房车上的冰箱可以存放n个鸡蛋,但每个鸡蛋存放一天小号的能量费用是m,为了让这n个鸡蛋的购买和存放总费用最低,明明在网上查询了这n个城市近期购买一个鸡蛋的价格,明明想请您帮助编一个程序,根据输入的n、m及这n个城市的鸡蛋价格计算处最小的花费。 输入 输入包含两行: 第一行有两个整数n 和 m,用一个空格隔开 (n为城市数量,m为每个鸡蛋存储耗能) 第二行有n个小于[10000]的正整数,表示n个城市的鸡蛋价格,临近两数之间用空格隔开。

求解:此题已说明冰箱可以存放n个鸡蛋,说明所有鸡蛋可以在第一个城市购买,也可以分开购买。 关键的循环部分外层循环用城市数量n,假设在第一个城市的时候,要至少先买一个鸡蛋,第二个买不买要看第二个城市的鸡蛋的价格,比较第一个城市鸡蛋和存储价格来确定,如果第二个城市的鸡蛋价格比第一个城市的鸡蛋价格加存储一个鸡蛋价格便宜,则在第二个城市购买,否则就需要在第一个城市多买一个,也就是说第二个城市的鸡蛋最低价格更正为第一个城市鸡蛋价格+存储价格。修正后再到第三个城市只需比较第二个城市修正后的价格+存储和第三个城市鸡蛋的价格,按照第二个城市修正第三个城市的价格… 修正后的鸡蛋价格做累加,就可以获得最小开销。在这里从第三个城市看鸡蛋是在当前城市买还是在修正后的上一个城市买,上一个城市买也可能是按上上个城市修正的价格买,总之,这样获得的是最小开销。

#include<stdio.h>
main()
{
	int m n, m, eggPerPrice[10000];
	int i, j, temp, sum;
	for (i=0;i<n;i++) scanf("%d",&eggPerPrice[i]); 
	for(i=0; i<n;i++)
	{
		temp=eggPerPrice[i];
		for (j=0; j<i; j++)
		{
			if (temp>=eggPerPrice[j]+(i-j)*m) temp=eggPerPrice[j]+(i-j)*m; // 判断最小开销并修正当前城市购买鸡蛋方法
		}
		sum=sum+temp;
}
print("%d",sum);
}

感谢机自2111-2113同学提供的相关材料 此 敬

经验分享 程序员 微信小程序 职场和发展