HIT ACM 1005高速公路快餐店仓库选址(动态规划)

Problem Description

在一条高速公路上有 n 个快餐店(0<n<=200),现在要在这 n 个快餐店位置里面选区 k 个位置作为仓库的位置(0<k<=30) 。每个快餐店由最近的仓库供应。第一行 输入 n 和k , k< n;下面n行输入n个整数(d1 < d2 < … < dn)。总的运输代价sum等于下表的计算值。要求sum最小。求最小值。
总代价公式

分析:

显然这是一道动态规划的题目。按照运筹学的最优化原理:无论过去的状态和决策如何,对前面的决策所形成的状态而言,余下的决策必须构成最优策略。每一个最优策略只能由最优子策略构成。由此导致了分阶段决策的方法。

另:若在 i 餐厅和 j 餐厅之间的餐厅均由一个仓库供应。则,最优策略为:这个仓库在 i 与 j 之间。可选取 (i+j)/2 的位置。然后计算所有餐厅到仓库的距离之和。

解决:

用array[i][j]表示前 j 个餐厅中有 i 个仓库时的最优策略下的运输代价。
则状态转移方程为:

array[i][j] = min(array[i-1][j],( i-1<=temp <= j){ array[i-1][temp]+ cost[tmep][j]} )

含义为:前 j 个餐厅有 i i i个仓库的最优策略为:
1,前 j 个餐厅有 i − 1 i-1 i1 个仓库的最优策略
2,新加了一个餐厅。利用最优子策略组合,再选取其中的最优策略。有j-(i-1)个组合结果。分别代表新加的仓库负责:1)第i 至 j 个餐厅 2) 第i +1至 j 个餐厅 …

代码

由于经常需要运输代价的数据,为了降低时间复杂度,将所有的运输代价存在costArray表中。

#include <stdio.h>
#include <stdlib.h>
int dist1[30];
int array[30][
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值