运丝绸问题 -- 贪心/动态规划

明朝时候, 江南制造要运送3000匹丝绸至京城; 一路上需要经过大约1000个关卡, 由于官员腐败,层层卡要; 每次携带丝绸过关, 需要缴纳1匹丝绸作为过关费用; 运送丝绸的车队每次最多只能1000匹丝绸;不考虑车队返回的旅途开销; 如何才能确保运输到京城的丝绸最大?


在使用动态规划/贪心算法时候,需要确定一点就是子问题的最优解,可以改善整体问题的最优解。虽然没有严格的数据证明,可以很明显的知道经过K个关卡的最优解(K 小于等于1000);

  • -3(假设(K-1)个关卡的最优解下大于2000丝绸) + (K-1)个关卡的最优解
  • -2(假设(K-1)个关卡的最优解下大于1000丝绸) + (K-1)个关卡的最优解
  • -1(假设(K-1)个关卡的最优解下小于1000丝绸) + (K-1)个关卡的最优解
k(关口) m(剩余)
0 3000
1 2997
2 2994
3 2991
... ...

因为只依赖于前一个状态,似乎很简单用不到动态规划,只要使用贪心的方法每步都求最优解即可;
也不用全部推导完;思考一下,最终是要合并成一车跑完剩下全程;只要确保前面往返2,3次的关卡最少即可;

k(关口) m(剩余) count
334 1998 三次
334 + 499 1000 二次
334 + 499 + 167 833 一次

883就是剩余数量;

你可能感兴趣的:(运丝绸问题 -- 贪心/动态规划)