动态编程算法(MinCost购买苹果)

时间:2018-02-08 15:08:02

标签: algorithm dynamic-programming

您好我正在尝试为以下问题构建动态编程解决方案:

鉴于一个家庭每天消耗2公斤苹果,苹果持续10天,而第i天每天苹果公斤的价格是p [i],我必须找到最低成本,所以家庭不会用完了苹果。

如果没有10天的限制我已经提出了解决方案,那我就制作了一个新阵列:

locmin=p[1]
for i=2 to n 
if locmin>=p[i] then c[i]=p[i]
else locmin=p[i] c[i]=p[i]
and then 
OPT[1]=c[i]
OPT(i)=OPT[i-1]+2*c[i] (well not so much of dynamic programming but it is O(n)) .

当考虑10天限制时,我想出了ac [i,10]矩阵,其中我以与之前相同的方式存储前10天窗口的最低值,每个i-10,我想出了解决方案

OPT(i)=OPT[i-1]+2*min(p[i,j]) 0<j<=10 

。 O(n ^ 2)解 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我们不仅可以在10天内O(n)进行kg,而且可以使用任意大小的窗口。我们一次要花一天时间。家里每天都吃2公斤苹果。 这两个2 * best_price的价格是多少?显然,它是best_price = min(p[i-9...i]),其中class A { int a = 0; int b; int c; public: A(int x) : b{ x }, c{ x } { } A() : b{ 1 }, c{ 0 } { } };

让我们保持堆叠。如果价格较高,我们会添加到堆栈中,如果价格较低,我们会弹出堆栈直到较低的早期价格或堆栈为空,然后添加新价格。堆栈中的第一个元素将是最佳选择,它将在到期时被堆栈中的下一个元素替换。

相关问题