fork download
  1. from sys import stdin
  2.  
  3. for cn in xrange(1,1+int(stdin.readline())):
  4. [N,M] = [int(z) for z in stdin.readline().split()]
  5. A = [int(z) for z in stdin.readline().split()]
  6. B = [int(z) for z in stdin.readline().split()]
  7. A = [A[2*i:2*i+2] for i in xrange(N)]
  8. B = [B[2*i:2*i+2] for i in xrange(M)]
  9. W = [[0 for i in xrange(M+1)] for j in xrange(N+1)]
  10. for i in xrange(N):
  11. for j in xrange(M):
  12. W[i+1][j+1] = max(W[i+1][j], W[i][j+1])
  13. if A[i][1] == B[j][1]:
  14. ps = [[z,A[z][0]] for z in xrange(i,-1,-1) if A[z][1] == A[i][1]]
  15. qs = [[z,B[z][0]] for z in xrange(j,-1,-1) if B[z][1] == B[j][1]]
  16. for iz in xrange(1,len(ps)):
  17. ps[iz][1] += ps[iz-1][1]
  18. for iz in xrange(1,len(qs)):
  19. qs[iz][1] += qs[iz-1][1]
  20. for k in ps:
  21. for l in qs:
  22. W[i+1][j+1] = max(W[i+1][j+1],W[k[0]][l[0]]+min(k[1],l[1]))
  23. print "Case #%d: %d" % (cn, W[-1][-1])
  24.  
Success #stdin #stdout 0.02s 4680KB
stdin
4
3 3
10 1 20 2 25 3
10 2 30 3 20 1
3 5
10 1 6 2 10 1
5 1 3 2 10 1 3 2 5 1
3 5
10 1 6 2 10 1
5 1 6 2 10 1 6 2 5 1
1 1
5000000 10
5000000 100
stdout
Case #1: 35
Case #2: 20
Case #3: 21
Case #4: 0