SHOW:
|
|
- or go back to the newest paste.
| 1 | import sys | |
| 2 | ||
| 3 | dp = [ [ [0 for _ in range(152)] for _ in range(302) ] for _ in range(302)] | |
| 4 | mark = [ [ [0 for _ in range(152)] for _ in range(302) ] for _ in range(302)] | |
| 5 | pas = 0 | |
| 6 | n = 0 | |
| 7 | d = 0 | |
| 8 | ||
| 9 | def f(id, a, de): | |
| 10 | if(id == n): | |
| 11 | return de == d and a == 0 | |
| 12 | if(a > n//2): | |
| 13 | return 0 | |
| 14 | if(mark[id][a][de] == pas): | |
| 15 | return dp[id][a][de] | |
| 16 | mark[id][a][de] = pas | |
| 17 | if(a): | |
| 18 | dp[id][a][de] = f(id + 1, a - 1, de) + f(id + 1, a + 1, max(de,a+1)) | |
| 19 | return dp[id][a][de] | |
| 20 | ||
| 21 | dp[id][a][de] = f(id + 1, a + 1, max(de,a+1)) | |
| 22 | return dp[id][a][de] | |
| 23 | ||
| 24 | ||
| 25 | for q in sys.stdin: | |
| 26 | vet = q.split() | |
| 27 | n = int(vet[0]) | |
| 28 | d = int(vet[1]) | |
| 29 | pas += 1 | |
| 30 | print ("%d"%f(0,0,0)) |