int dfs(int pos, bool limit, int cnt) {
if (!pos) {
return cnt <= 3;
}
if (!limit && ~f[pos][cnt])return f[pos][cnt];
int up = limit ? a[pos] : 9;
int res = 0;
for (int i = 0; i <= up; i++) {
if (i >= 1&&cnt+1<=3) {
res += dfs(pos - 1, limit && i == up, cnt + 1);
}
else {
res += dfs(pos - 1, limit && i == up, cnt);
}
}
if (!limit)f[pos][cnt] = res;
return res;
}
当我把
if (i >= 1) {
res += dfs(pos - 1, limit && i == up, cnt + 1);
}
修改成了
if (i >= 1&&cnt+1<=3) {
res += dfs(pos - 1, limit && i == up, cnt + 1);
}
第二个样例输出1,本来应该输出0
第三个样例输出3,本来应该输出1