数位dp关于这道题简单修改一下为什么答案就不一样?
查看原帖
数位dp关于这道题简单修改一下为什么答案就不一样?
1201076
senak楼主2024/7/5 17:16
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) {//这里如果去掉cnt+1<=3就能AC
			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

2024/7/5 17:16
加载中...