看了下校内网发现距离微调过了,于是开始划线。。
long_run.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| ifo = { 1:'体活', 2:'副馆', 3:'二教', 4:'九教' } data = { '12':580,'23':650,'34':400,'14':380 } result = dict() aim = 2000 def sort(s): return ''.join((lambda x:(x.sort(),x)[1])(list(s))) def show(): rec('',0) keys = sorted(result, key=lambda k:result[k]) for k in keys: print result[k], k def rec(path, dis): if dis >= aim: result[path[:-2]] = dis return if path == '': for i in '1234': rec(i, 0) else: if len(path) > 2: dis_key = sort(path[-3]+path[-1]) dis = dis + data[sort(dis_key)] if path[-1] in '13': rec(path+'-2', dis) rec(path+'-4', dis) else: rec(path+'-1', dis) rec(path+'-3', dis) if __name__ == '__main__': show()
|
本来思路是用图的,感觉太麻烦换成树也行,但是突然发现自己已经差不多完全忘记数据结构了。后来回寝室翻翻书,最后还是用无脑递归,两节课没听就在搞这个东西。(汗)
result:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 2000 3-4-3-4-3-4 2000 4-3-4-3-4-3 2010 1-2-3-4-1 2010 1-4-3-2-1 2010 3-4-1-2-3 2010 2-3-4-1-2 2010 4-1-2-3-4 2010 4-3-2-1-4 2010 2-1-4-3-2 2010 3-2-1-4-3 2030 3-4-3-2-1 2030 1-2-3-4-3 2080 3-2-3-4-1 2080 1-4-3-2-3 2100 4-3-2-3-4 2100 1-4-1-4-1-2 2100 3-4-3-2-3 2100 2-1-4-1-4-1 2100 3-2-3-4-3 ...
|
2000m…恕我眼拙注意有个整数400……平时跑的那条路变成1800+m不再考虑,等于原来二九要跑4趟的,现在变成5趟了,跑5趟也太蠢了吧,一个点要刷3次卡?万一排队怎么办?
所有的2010m结果其实是一样的,8种不同的姿势跑一周而已。
另外从去年的经验看,请尽量避免二教这个点,排队人数极其容易50+,导致速度不够从而…
另附女生的新路线
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 1520 1-4-1-4-1 1520 4-1-4-1-4 1540 1-2-1-4 1540 4-1-2-1 1540 3-4-1-4-1 1540 1-4-1-4-3 1560 3-4-1-4-3 1560 4-1-4-3-4 1560 1-4-3-4-1 1560 4-3-4-1-4 1580 3-4-3-4-1 1580 1-4-3-4-3 1600 3-4-3-4-3 1600 4-3-4-3-4 1610 4-1-2-3 1610 3-2-1-4 1630 4-3-2-1 1630 1-2-3-4 ...
|
最短路线居然他喵的没变