欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

动态规划常用算法,动态规划lcs

墨初 知识笔记 135阅读
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;}

标签:
声明:无特别说明,转载请标明本文来源!