CodeForces Beta Round #18 D. Seller Bob
動的計画法。i日目に2xMBを手に入れて、j日目に2xMBのメモリスティックを買いに来る客がいるならば、j日目の収入はj-1日目の収入(この客にメモリスティックを売らない)とi日目の収入+2xberllar(この客にメモリスティックを売る)のどちらか大きい方。
stick = [-1]*2001 earn = [0] n = input() for i in range(1,n+1): t = raw_input().split() desc,x = t[0],int(t[1]) if desc == "win": stick[x] = i earn += [earn[i-1]] if desc == "sell": if stick[x] >= 0: earn += [max(earn[i-1],earn[stick[x]]+2**x)] else: earn += [earn[i-1]] print earn[n]