试试这个数据:
100
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
或者:
100
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
如果你记搜数组初始值赋的是 inf,然后记搜的时候判断当前状态 == inf
就搜索,那么这样会 T。
举第一个数据的例子。如果你一开始就填奇数,那么搜到后面的时候会发现无解。此时你的记忆数组就不会更新。那么下一次你再搜到这里的时候又会搜索一遍。如果这次还是无解,那么你的记忆数组依然不会更新。所以一直下去就会 T。
解决方法就是把“没搜过”和“无解”分成两个值表示。