
#include<iostream>
using namespace std;
long long dp[1005] = { 0 };
int main()
{
int n;
cin >> n;
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
//这是找规律看出来的
for (int i = 3; i <= n; i++){
dp[i] = dp[i - 2] + dp[i / 2];
}
cout << dp[n];
//正常的思路,例如6
//6前面一位是0不处理,前面一位是1,16,前面一个是2,有两种126,26,前面一位是3,有两种136,36
for (int i = 3; i <= n; i++){
for (int j = 0; j <= n / 2; j++){
dp[i] += dp[j];
}
}
}

本文介绍了一个使用动态规划解决数位DP问题的C++实现案例。通过递推公式dp[i] = dp[i-2] + dp[i/2],解决了数位DP中的一个典型问题。此外,还提供了一种正常思路下的双层循环实现,展示了如何通过前项状态计算当前状态。
2561

被折叠的 条评论
为什么被折叠?



