- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
〖问题14〗奶牛运输——信息学NOI联赛辅导专题.doc
〖问题14〗奶牛运输——信息学NOI联赛辅导专题
NOI竞赛辅导 王建德教练讲稿
状态的选取
状态的选定对整个问题的处理起了决定性的作用。我们选定的状态必须满足如下两点:
状态必须完全描述出事物的性质,两个不同事物的状态是不同的;
必须存在状态与状态之间的“转移方程”。以便我们可以由“初始问题”对应的状态逐渐转化为“终结问题”对应的状态。
状态是描述事物性质的量,所以我们应该以这个标准,根据题目中的具体要求来具体分析
〖问题14〗奶牛运输
有一个奶牛运输公司,需在7个农场A,B,C,D,E,F,G之间运输奶牛,从A出发,完成任务后要回到A。运输车每次只能运送一头奶牛,每个运输任务是由一对字母给出的,分别表示奶牛从哪个农场被运向另外一个农场。任务总数为N(1≦N≦12)。已知这些农场之间的距离,求出一条完成所有任务的最短路线。
d(P,Q)表示从农场P到农场Q的最短距离
完成所有任务的最短路线长度D
如果给定了完成任务的顺序,k1,k2,…,kN,则完成任务ki后,接着去接任务ki+1,至少需要走,于是
二 解题关键:选择状态
f(x, S)表示当前在农场Px,要完成S中的任务,并且必须从任务x开始完成要走的最短路长。完成任务x之后,假设下一步要完成任务y,y ( S – {x},则有
三 状态转移方程和阶段的划分
由此可建立状态转移方程
问题答案
解决几个问题。
1 如何存储集合S。
我们可以这样根据S,作数位tk,k=1,2,…,N,使
记
即T(10)是由数位tk, k=1,2,…,N组成的二进制数的十进制表示。这样f(x,S)就能用二维数组f[x,T]存储,其中T就是T(10)。同时这也给出了阶段的一种划分:按T从小到大的顺序。
2 如何得到d(x,y)
在分析问题时,我们假定已经知道了任两个农场x, y之间的最短路长d(x,y),现在我们必须解决如何求出d(x,y)。
注意到题中给出的任两个农场x, y之间的路长w(x, y),满足三角不等式
w(x, y) + w(y, z) ( w(x, z)
因此
d(x, y) = w(x, y)
PROBLEM-Delivering-Cows(w[A..G][A..G], N, P[1..N], Q[1..N])
for T=tNtN-1…t2t1←1 to 2N-1
do S←{ k | tk=1 }
for each x ( S
do if |S|=1
then f[x,T]←w[P[x]][Q[x]]+w[Q[x]][A]
([x,T]←0
else f[x,T]←+(
for each y ( S – {x}
do T’=t’Nt’N-1…t’2t’1←T
t’x←0
if f[y,T’]+w[Q[x]][P[y]] f[x,T]
then f[x,T]←f[y,T’]+w[Q[x]][P[y]]
([x,T]←y
f[x,T]←f[x,T]+w[P[x]][Q[x]]
D←+(
for x←1 to N
do if f[x,2N-1]+w[A][P[x]] D
then D←f[x,2N-1]+w[A][P[x]]
y←x
size[L]←1
L[1]←A
S←{1,2,…,N}
for x←1 to N
do if L[1] ( P[y]
then size[L]←size[L]+1
L[size[L]]←P[y]
size[L]←size[L]+1
L[size[L]]←Q[y]
y’←y
y←([y][S]
S←S – {y’}
if L[size[L]] ( A
then size[L]←size[L]+1
L[size[L]]←A
return (D, L)
文档评论(0)