国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ 動態(tài)規(guī)劃 數(shù)位統(tǒng)計(jì)DP 計(jì)數(shù)問題

這篇具有很好參考價值的文章主要介紹了C++ 動態(tài)規(guī)劃 數(shù)位統(tǒng)計(jì)DP 計(jì)數(shù)問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

給定兩個整數(shù) a
和 b
,求 a
和 b
之間的所有數(shù)字中 0~9
的出現(xiàn)次數(shù)。

例如,a=1024,b=1032
,則 a
和 b
之間共有 9
個數(shù)如下:

1024 1025 1026 1027 1028 1029 1030 1031 1032

其中 0 出現(xiàn) 10
次,1 出現(xiàn) 10
次,2 出現(xiàn) 7
次,3 出現(xiàn) 3
次等等…

輸入格式
輸入包含多組測試數(shù)據(jù)。

每組測試數(shù)據(jù)占一行,包含兩個整數(shù) a
和 b

當(dāng)讀入一行為 0 0 時,表示輸入終止,且該行不作處理。

輸出格式
每組數(shù)據(jù)輸出一個結(jié)果,每個結(jié)果占一行。

每個結(jié)果包含十個用空格隔開的數(shù)字,第一個數(shù)字表示 0 出現(xiàn)的次數(shù),第二個數(shù)字表示 1 出現(xiàn)的次數(shù),以此類推。

數(shù)據(jù)范圍
0<a,b<100000000
輸入樣例:
1 10
44 497
346 542
1199 1748
1496 1403
1004 503
1714 190
1317 854
1976 494
1001 1960
0 0
輸出樣例:
1 2 1 1 1 1 1 1 1 1
85 185 185 185 190 96 96 96 95 93
40 40 40 93 136 82 40 40 40 40
115 666 215 215 214 205 205 154 105 106
16 113 19 20 114 20 20 19 19 16
107 105 100 101 101 197 200 200 200 200
413 1133 503 503 503 502 502 417 402 412
196 512 186 104 87 93 97 97 142 196
398 1375 398 398 405 499 499 495 488 471
294 1256 296 296 296 296 287 286 286 247
C++ 動態(tài)規(guī)劃 數(shù)位統(tǒng)計(jì)DP 計(jì)數(shù)問題,力扣,動態(tài)規(guī)劃,算法筆記,c++,動態(tài)規(guī)劃
主要思想就是分情況討論。文章來源地址http://www.zghlxwxcb.cn/news/detail-830676.html

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int get(vector<int> num, int l, int r) // 輔助函數(shù),返回一個大數(shù)l與r位之間的數(shù)字
{
    int res = 0;
    for(int i = l; i >= r; i -- )
        res = res * 10 + num[i];
    return res;
}

int power10(int x) // 輔助函數(shù),返回10的x次方
{
    int res = 1;
    while(x -- )
        res *= 10;
    return res;
}

int count(int n, int x) // 計(jì)算1 - n之間,x出現(xiàn)的次數(shù)
{
    if(!n) return 0;
    
    vector<int> num; // 把每一位取出來存下來
    while(n)
    {
        num.push_back(n % 10);
        n /= 10;
    }
    n = num.size();
    
    int res = 0;
    for(int i = n - 1 - !x; i >= 0; i -- ) //- !x的意思是,如果x是0 的話,不枚舉最高位
    {
        if(i < n - 1) // 非最高位的一般情況
        {
            res += get(num, n - 1, i + 1) * power10(i); // 情況1
            if(!x) res -= power10(i); // 特判一下特殊情況(x = 0),例子圖總從001開始算(本來是從000開始算的)
                                      //也就是少一份power10(i), 減掉即可
        }
        if(num[i] == x) // 情況2.2
            res += get(num, i - 1, 0) + 1; 
        else if(num [i] > x) // 情況2.3
            res += power10(i); 
    }
    return res;
}

int main ()
{
    int a, b;
    while(cin >> a >> b, a || b)
    {
        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;
}

到了這里,關(guān)于C++ 動態(tài)規(guī)劃 數(shù)位統(tǒng)計(jì)DP 計(jì)數(shù)問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 動態(tài)規(guī)劃——數(shù)位DP 學(xué)習(xí)筆記

    引入 數(shù)位 DP 往往都是這樣的題型:給定一個區(qū)間 ([l, r]) ,求這個區(qū)間中滿足某種條件的數(shù)的總數(shù)。 簡單的暴力代碼如下: 而當(dāng)數(shù)據(jù)規(guī)模過大,暴力枚舉就 (mathbb T) 飛了,因此引入數(shù)位 DP: 概念 數(shù)位(digit):對于十進(jìn)制,即把一個數(shù)字按照個位、十位、百位等,一位

    2024年02月08日
    瀏覽(26)
  • 算法基礎(chǔ)復(fù)盤筆記Day11【動態(tài)規(guī)劃】—— 區(qū)間DP、計(jì)數(shù)類DP、樹形DP、記憶化搜索

    算法基礎(chǔ)復(fù)盤筆記Day11【動態(tài)規(guī)劃】—— 區(qū)間DP、計(jì)數(shù)類DP、樹形DP、記憶化搜索

    ? 作者主頁:歡迎來到我的技術(shù)博客?? ? 個人介紹:大家好,本人熱衷于 Java后端開發(fā) ,歡迎來交流學(xué)習(xí)哦!( ̄▽ ̄)~* ?? 如果文章對您有幫助,記得 關(guān)注 、 點(diǎn)贊 、 收藏 、 評論 ?????? ?? 您的支持將是我創(chuàng)作的動力,讓我們一起加油進(jìn)步吧?。?!???? 1. 題目

    2024年02月01日
    瀏覽(24)
  • AcWing算法學(xué)習(xí)筆記:動態(tài)規(guī)劃(背包 + 線性dp + 區(qū)間dp + 計(jì)數(shù)dp + 狀態(tài)壓縮dp + 樹形dp + 記憶化搜索)

    AcWing算法學(xué)習(xí)筆記:動態(tài)規(guī)劃(背包 + 線性dp + 區(qū)間dp + 計(jì)數(shù)dp + 狀態(tài)壓縮dp + 樹形dp + 記憶化搜索)

    算法 復(fù)雜度 時間復(fù)雜度0(nm) 空間復(fù)雜度0(nv) 代碼 算法 通過滾動數(shù)組對01背包樸素版進(jìn)行空間上的優(yōu)化 f[i] 與 f[i - 1]輪流交替 若體積從小到大進(jìn)行遍歷,當(dāng)更新f[i, j]時,f[i - 1, j - vi] 已經(jīng)在更新f[i, j - vi]時被更新了 因此體積需要從大到小進(jìn)行遍歷,當(dāng)更新f[i, j]時,f[i - 1,

    2024年02月21日
    瀏覽(21)
  • POJ - 2282 The Counting Problem(數(shù)位DP 計(jì)數(shù)問題)

    Given two integers a and b, we write the numbers between a and b, inclusive, in a list. Your task is to calculate the number of occurrences of each digit. For example, if a = 1024 a = 1024 a = 1024 and b = 1032 b = 1032 b = 1032 , the list will be 1024 1024 1024 1025 1025 1025 1026 1026 1026 1027 1027 1027 1028 1028 1028 1029 1029 1029 1030 1030 1030 1031 10

    2023年04月17日
    瀏覽(20)
  • 【動態(tài)規(guī)劃】【 數(shù)位dp】2827. 范圍中美麗整數(shù)的數(shù)目

    【動態(tài)規(guī)劃】【 數(shù)位dp】2827. 范圍中美麗整數(shù)的數(shù)目

    數(shù)位dp 動態(tài)規(guī)劃匯總 給你正整數(shù) low ,high 和 k 。 如果一個數(shù)滿足以下兩個條件,那么它是 美麗的 : 偶數(shù)數(shù)位的數(shù)目與奇數(shù)數(shù)位的數(shù)目相同。 這個整數(shù)可以被 k 整除。 請你返回范圍 [low, high] 中美麗整數(shù)的數(shù)目。 示例 1: 輸入:low = 10, high = 20, k = 3 輸出:2 解釋:給定范圍

    2024年04月12日
    瀏覽(21)
  • [leetcode~數(shù)位動態(tài)規(guī)劃] 2719. 統(tǒng)計(jì)整數(shù)數(shù)目 hard

    給你兩個數(shù)字字符串 num1 和 num2 ,以及兩個整數(shù) max_sum 和 min_sum 。如果一個整數(shù) x 滿足以下條件,我們稱它是一個好整數(shù): num1 = x = num2 min_sum = digit_sum(x) = max_sum. 請你返回好整數(shù)的數(shù)目。答案可能很大,請返回答案對 109 + 7 取余后的結(jié)果。 注意,digit_sum(x) 表示 x 各位數(shù)字之

    2024年01月18日
    瀏覽(24)
  • C++動態(tài)規(guī)劃-線性dp算法

    C++動態(tài)規(guī)劃-線性dp算法

    莫愁千里路 自有到來風(fēng) CSDN 請求進(jìn)入專欄? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??X 是否進(jìn)入《 C++ 專欄》? 確定 目錄 ?線性dp簡介 斐波那契數(shù)列模型? 第N個泰波那契數(shù) 思路: 代碼測試: ?三步問題 思路: 代碼測試: 最小花費(fèi)爬樓梯 思路: 代碼測試: ?路徑問題 數(shù)字三

    2024年02月19日
    瀏覽(38)
  • c++ 算法之動態(tài)規(guī)劃—— dp 詳解

    c++ 算法之動態(tài)規(guī)劃—— dp 詳解

    dp 是 c++ 之中一個簡單而重要的算法,每一個 OIer 必備的基礎(chǔ)算法,你知道它究竟是什么嗎? 目錄 一、簡介 ? ? ? ? 1.為什么不能貪心? ????????2.揭秘 dp?? 二、應(yīng)用 ????????1.定義 ????????2.邊界值 ????????3.動態(tài)轉(zhuǎn)移方程 ????????4.結(jié)果 ? ? ? ? 5.代碼

    2024年04月09日
    瀏覽(27)
  • 【算法】動態(tài)規(guī)劃(dp問題),持續(xù)更新

    介紹本篇之前,我想先用人話敘述一般解決動態(tài)規(guī)劃問題的思路: 動態(tài)規(guī)劃的問題,本身有許多產(chǎn)生結(jié)果的可能,需要在具體題目下得到滿足某個條件的解。 如何得到呢? 我們就需要根據(jù)這個具體問題,建立一個狀態(tài)表( dp 表 ),在這張 dp 表中的每一個位置的數(shù)據(jù)都有明

    2024年02月04日
    瀏覽(48)
  • C++算法 —— 動態(tài)規(guī)劃(7)兩個數(shù)組的dp

    C++算法 —— 動態(tài)規(guī)劃(7)兩個數(shù)組的dp

    每一種算法都最好看完第一篇再去找要看的博客,因?yàn)檫@樣會幫你梳理好思路,看接下來的博客也就更輕松了。當(dāng)然,我也會盡量在寫每一篇時都可以不懂這個算法的人也能邊看邊理解。 動規(guī)的思路有五個步驟,且最好畫圖來理解細(xì)節(jié),不要怕麻煩。當(dāng)你開始畫圖,仔細(xì)閱讀

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包