今天我遇到了經典問題。針對Timus 1005的Python解決方案的Possbile優化 - 平衡分區
問題描述在Timus : 1005。
我知道如何用C++來解決它。 但是,當我在python中嘗試它時,我得到超出時間限制。
我使用蠻力但失敗。然後我嘗試了DP,也失敗了。 這是我的解決方案:
n = int(input())
wi = list(map(int, input().split()))
ans = 1<<21
up = (1<<(n-1))-1
su = 0
for x in range(up, -1, -1):
su = 0
for y in range(n):
su += wi[y] if (x & 1<<y) else -wi[y]
ans = min(ans, abs(su))
print(ans)
它在Test3上得到了TLE。
這裏是另外一個DP的解決方案:
n = int(input())
wi = list(map(int, input().split()))
wi.sort()
ans = sum(x for x in wi)
up = ans // 2
dp = [0] * (up + 1)
dp[0] = 1
for x in range(n):
for y in range(up, wi[x]-1, -1):
dp[y] |= dp[y-wi[x]]
aw = up
while not dp[aw]:
aw -= 1
print(ans - 2 * aw)
了TLE的測試4.
因此,儘管使用Python我的問題是如何通過問題的時間限制?
如果'i!= k'有約束'w_i!= w_k'?因爲如果元素不同,問題可以通過python集來解決。 – marmeladze
@marmeladze這個問題並不能保證。 – ArSorrw