4.8阿里笔试讨论
第一题AC了,要注意结果要和木头人数量m取min
if __name__ == "__main__": T = int(input()) ret = [] def woodman(n, m, a, b): if n < a: return 0 if n == a: return b if (n - a) * b // a + b > m: return m else: return (n - a) * b // a + b for count in range(T): tmp = list(map(int, input().split(' '))) ret.append(woodman(tmp[0], tmp[1], tmp[2], tmp[3])) for qq in range(len(ret)): print(ret[qq])第二题用回溯会超时,只过了30%,不知道有没有ac了的大佬指点一下怎么优化
if __name__=="__main__": T=int(input()) ret=[] n=0 k=0 result=[] def trackback(axis, plus): i, j = axis current = array[i][j] flag = 0 for m in range(1,k+1): if i + m < n: if array[i + m][j] > current: flag = 1 trackback((i + m, j), plus + array[i + m][j]) if i - m >= 0: if array[i - m][j] > current: flag = 1 trackback((i - m, j), plus + array[i - m][j]) if j + m < n: if array[i][j + m] > current: flag = 1 trackback((i, j+m), plus + array[i][j + m]) if j - m >= 0: if array[i][j - m] > current: flag = 1 trackback((i , j-m), plus + array[i][j - m]) if flag == 0: result.append(plus) for count in range(T): tmp=input().split(' ') n=int(tmp[0]) k = int(tmp[1]) array=[] for i in range(n): array.append(list(map(int,input().split(' ')))) if k==0 or n==1: ret.append(array[0][0]) continue result=[] trackback((0,0),array[0][0]) ret.append(max(result)) for qq in range(len(ret)): print(ret[qq])
查看2道真题和解析
顺丰集团工作强度 379人发布