3404 Crossing River 题目大意是有N个速度未必相同的人划船过河,每次最多载2个人,每次由划的慢的人划,问最短要多久才能将所有人渡过河?设每个人用时从小到大为t[0]、t[1]....t[n-1]、t[n]。 看到这个问题首先想到的是一个牧人、羊、狼、草过河的问题,可是这里是求最小值,感觉没什么思路,把sample看懂以后就有点清晰了:关键在于用好速度最快和第二快的人。而且很容易想到,一旦速度很慢的渡过了河,就不可能再返程,什么是很慢呢?列个式子,每次考虑送两个人,因为基本策略有两种:一种是最快的人把两个人分别送去再自已回来,另一种是最快和次快的人一起去,把次快的留下用以下一次把船划回,这样可以使两个最慢的人一起过河。感觉讲的抽象点,举sample来说吧,它的策略应当是第二种: 1,2--> <--1 5,10--> <--2 1,2-->共用17个单位时间,而对于四个人用时为1,2,2,2的情况则应该用第一种策略 1,2--> <--1 1,2--> <--1 1,2-->共用8个单位时间。(如果用策略2则要用9个单位时间) 把两次来回即送过去两个人为一次考察对象,很容易得出结论:当a[n-1]+a[0]> 2*a[1]时,采用策略1,否则采用策略2。由此列出下式:再适当处理边界就搞定了!