动态规划(数位统计Dp)

编程入门 行业动态 更新时间:2024-10-09 12:34:50

动态规划(<a href=https://www.elefans.com/category/jswz/34/1747675.html style=数位统计Dp)"/>

动态规划(数位统计Dp)

AcWing 338. 计数问题  

思路分析:

代码展示: 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;//10的x次方
int pow10(int x)
{int res = 1;while(x --) res *= 10;return res;
}
int get(vector<int> num, int l, int r)
{int res = 0;for (int i = l; i >= r; i --)res = res * 10 + num[i];return res;
}
int count(int n, int x)
{//当n == 0时if (!n) return 0;vector<int> num;//把每一位数存到数组中去while (n){num.push_back(n % 10);n /= 10;}n = num.size();int res = 0;//枚举每一位//当x为0时,因为0不会出现在最高位高位不用枚举,所以直接从第二位开始枚举for (int i = n - 1 - !x; i >= 0; i --){//第一种情况    当只有一位数时,不可能出现第一种情况if (i < n - 1){res += get(num, n - 1, i + 1) * pow10(i);//当x == 0时,x左边的位数需要从1开始枚举,但是第一种情况是从0开始枚举,所以需要处理一下细节if (x == 0) res -= pow10(i);}//第二种情况    if (x < num[i]) res += pow10(i);else if (x == num[i]) res += get(num, i - 1, 0) + 1;}return res;
}
int main()
{while (true){int a, b;cin >> a >> b;if (a == 0 && b == 0) break;if (a > b) swap(a, b);for (int i = 0; i < 10; i ++)cout << count(b, i) - count(a - 1, i) << ' ';cout << endl;}return 0;
}

更多推荐

动态规划(数位统计Dp)

本文发布于:2023-12-03 08:08:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1653040.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数位   动态   Dp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!