输入包括两行: 第一行为整数n(1 ≤ n ≤ 50) 第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。
输出一个整数,表示最少需要处理的时间
5 3072 3072 7168 3072 1024
9216
def main(): n = int(input()) lst = list(map(lambda x: int(x) >> 10, input().split())) s = sum(lst) // 2 dp = [0] * (s + 1) for i in range(n): for j in range(s, -1, -1): if j >= lst[i]: tmp = dp[j - lst[i]] + lst[i] if dp[j] < tmp: dp[j] = tmp else: break print(max(dp[s], sum(lst) - dp[s]) << 10) if __name__ == '__main__': main()
N = int(raw_input()) length = map(lambda x: int(x)//1024, raw_input().split()) V = sum(length) // 2 f = [0] * (V + 1) for i in range(N): v = V while v >= length[i]: f[v] = max(f[v-length[i]] + length[i], f[v]) v = v - 1 print max(f[V], sum(length) - f[V]) * 1024
强烈建议每一种语言有自己的时间时限。Python这个已经不知道还能怎么再优化了。 目前能通过40%。 希望能有人能给出更精简的code