acwing算法提高之动态规划--数位DP
2023-12-24 22:30:37
1 基础知识
暂无。。。
2 模板
暂无。。。
3 训练
题目1:度的数量。
解题思路:分类讨论。
C++代码如下,
#include <iostream>
#include <vector>
using namespace std;
const int N = 35;
int K, B;
int f[N][N];
void init() {
for (int i = 0; i < N; ++i) {
for (int j = 0; j <= i; ++j) {
if (!j) f[i][j] = 1;
else f[i][j] = f[i-1][j] + f[i-1][j-1];
}
}
return;
}
int dp(int n) {
if (!n) return 0;
vector<int> nums;
while (n) nums.emplace_back(n % B), n /= B;
int res = 0;
int last = 0;
for (int i = nums.size() - 1; i >= 0; --i) {
int x = nums[i];
if (x) { //求左边分支中的数的个数
res += f[i][K - last];
if (x > 1) {
if (K - last - 1 >= 0) res += f[i][K - last - 1];
break;
} else {
last++;
if (last > K) break;
}
}
if (!i && last == K) res++; //最右侧分支上的方案
}
return res;
}
int main() {
init();
int l, r;
cin >> l >> r >> K >> B;
cout << dp(r) - dp(l - 1) << endl;
return 0;
}
题目2:
文章来源:https://blog.csdn.net/YMWM_/article/details/135187993
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!