hdu 2089 不要62(數位DP)

来源:https://www.cnblogs.com/noback-go/archive/2019/03/20/10567886.html
-Advertisement-
Play Games

不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 64679 Accepted Submission(s): 25710 Problem ...


不要62

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 64679    Accepted Submission(s): 25710


Problem Description 杭州人稱那些傻乎乎粘嗒嗒的人為62(音:laoer)。
杭州交通管理局經常會擴充一些計程車車牌照,新近出來一個好消息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別計程車司機和乘客的心理障礙,更安全地服務大眾。
不吉利的數字為所有含有4或62的號碼。例如:
62315 73418 88914
都屬於不吉利號碼。但是,61152雖然含有6和2,但不是62連號,所以不屬於不吉利數字之列。
你的任務是,對於每次給出的一個牌照區間號,推斷出交管局今次又要實際上給多少輛新計程車車上牌照了。   Input 輸入的都是整數對n、m(0<n≤m<1000000),如果遇到都是0的整數對,則輸入結束。   Output 對於每個整數對,輸出一個不含有不吉利數字的統計個數,該數值占一行位置。   Sample Input 1 100 0 0   Sample Output 80   鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2089   題目大意:在n-m中有多少個不含 62 4的數   解題思路:   數位DP。記憶化搜索。可以想到用首碼和來解決問題,具體來說,就是[a,b] = [0,b] - [0,a)。   數位DP,將數字各位(個,十,百,千……)分為單一的數字(例如:654321,將其分成 6 5 4 3 2 1)。分數據,我們需要記錄什麼呢?數字的長度是必須記錄的(在此例中長度len=6),因為我們隨後的搜索需要以長度來作為條件。   運用搜索,可以從兩個方向搜索。一是從最高位,二是從最低位。兩者中我們選擇前者。解釋一下:   因為數據較大,我們要儘可能優化時間,所以要用到記憶化搜索。我們選擇從最高位開始搜索,如果我們遍歷0-9後得到一個答案9,我們存起來,然後當遍歷10-19時 可以直接使用這個答案9,因為他們的過程是相同的。數字擴大之後也是同樣的道理。如果選擇從低位搜索,就做不到這樣的效果。dp意義也就失去了,純暴力。。   先上AC代碼,下麵繼續解釋  
#include<stdio.h>
#include<string.h>

int a,b,dp[20][2],shu[20];

int dfs(int len,bool if6,bool up)
{
    if(len==0) return 1;
    if(!up&&dp[len][if6])
        return dp[len][if6];    //記憶 
    int cnt=0,maxx=up?shu[len]:9;   //迴圈限制 
    for(int i=0;i<=maxx;i++)
    {
        if(i==4||if6&&i==2)   //搜索到4時直接跳出不計數,當上一位為6並且這一位為2時跳出不計數 
            continue ;
        cnt+=dfs(len-1,i==6,up&&i==maxx);
    }
    return up?cnt:dp[len][if6]=cnt;
}

int solve(int x)
{
    int k=0;
    memset(shu,0,sizeof(shu));
    while(x)
    {
        shu[++k]=x%10;
        x/=10;
    }
    return dfs(k,false,true);
}

int main()
{
    while(scanf("%d%d",&a,&b)!=EOF&&(a+b))
    {
        printf("%d\n",solve(b)-solve(a-1));
    }
    return 0;
}
View Code

 

現在解釋一下搜索。len是當前搜索位,if6為上一位是否為6,up為上一位是否是最大值(還是654321,當len=6,up為ture,所以迴圈只能到達i==6;如果len=6,i<6,dfs,那麼up為false,所以迴圈可以到9).

直觀數字  給定數字235,搜索len=3時,如果迴圈中i=1,那麼下一位可以搜索到9,即從100-190;如果迴圈中i=2,那麼下一位搜索只能迴圈到3,即從200-230。

解釋起來有些困難,理解代碼更容易一點。

因水平有限,只能解釋到這裡了。。。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • /************************************************** *程式名:test1.cpp *編輯者:鴻灬噯 *註:驗證全局變數的改變。 ***************************************************/ #includ... ...
  • 普通的bean的初始化是在容器啟動初始化階段執行的,而被lazy-init修飾的bean 則是在從容器里第一次進行context.getBean(“”)時進行觸發。Spring 啟動的時候會把所有bean信息(包括XML和註解)解析轉化成Spring能夠識別的BeanDefinition並存到Has ...
  • 1.spring約束的導入 2.SSH常用約束 3.application.xml的引入方式 <1.通過ClassPathXmlApplicationContext引入配置文件application.xml <2.application.xml <3.命名空間的引入 4.在過濾器中配置applica ...
  • 今天遇到一問題,js文件中調用字元串的replace方法,不起作用。 後來排查可能覺得replace("<option value='1'>admin</option>","")中,前邊的字元串單引號也要和頁面上的一致才能。 果然發現頁面中的value用的是“”雙引號,我自己寫的是''單引號,導致匹 ...
  • C語言中的記憶體分配與釋放 對C語言一直都是抱著學習的態度,很多都不懂,今天突然被問道C語言的記憶體分配問題,說了一些自己知道的,但感覺回答的並不完善,所以才有這篇筆記,總結一下C語言中記憶體分配的主要內容。 相關問題 剛剛在一篇博文看到一個簡單的問題: 兩段代碼都很簡單,輸出一段字元,類型不同,一個是c ...
  • 使用python requests模塊調用vmallarg.vmall.com介面API時報如下錯誤: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='vmallrag.vmall.com', port=443): Max ...
  • 由題意可得出遞推式$f[i ,j]=\sum_{e\in S} f[i 1,\frac{j}{e}]$,初值$f[0,0]=1$,答案為$f[n,x]$,具體意義不表。 分析可知$f[1,e(e\in S)]=1$,$f[i,ab]=\sum_{a\in S,b\in S}f[i 1,a]f[1,b ...
  • ! 本文編輯中 `centos ssh 無法連接 ` ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...