终于改好啦!虽然提交上去莫名全部re,但至少我自己用rand()造的数据没问题了。
```cpp
int dfs(int i, int j, int k)
{
if (i > N)
return 0;
if (dp[i][j][k] > 0)
return dp[i][j][k];
if (j & 1)
return dp[i][j][k] = dfs(i + 1, j >> 1, ((k > -INF) ? k - 1 : -1));
int m = INF;
int r = INF;
for (int t = 0; ; t++)
{
if (i + t > r)
break;
if (!((j >> t) & 1))
{
r = min(r, i + t + B[i + t]);
m = min(m, ((k>-100)?(T[i + k] ^ T[i + t]):0)
+ dfs(i, j | (1 << t), t));
}
}
return dp[i][j][k] = m;
}
```
by ddwqwq @ 2018-01-09 20:53:54