problem description
杭州人稱那些傻乎乎粘嗒嗒的人為62(音:laoer)。
杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。
不吉利的數字為所有含有4或62的號碼。例如:
62315 73418 88914
都屬於不吉利號碼。但是,61152雖然含有6和2,但不是62連號,所以不屬於不吉利數字之列。
你的任務是,對於每次給出的乙個牌照區間號,推斷出交管局今次又要實際上給多少輛新的士車上牌照了。
input
輸入的都是整數對n、m(0
output
對於每個整數對,輸出乙個不含有不吉利數字的統計個數,該數值佔一行位置。
sample input
1 1000 0
sample output
80
題意:給你乙個閉合區間,問在這個區間裡的數有多少符合每一位沒有4,且沒有62連號。
思路:以前用的方法比較差,換了一種新的寫了一下。先預處理出dp[i][j],dp[i][j]表示從右往左第i位為j的總方案數,這裡dp的時候,先初始化一位的情況,然後每一次迴圈向左列舉一位,然後再用solve函式求出[0,r)的情況總數,那麼最後的答案就是solve(m+1)-solve(n)了。這裡預處理dp的時候可以不用考慮前導零的情況,因為000043就是43,這兩者只算了一次,沒有重複算,可以動手畫一下。
#include#include#include#include#include#include#include#include#include#include#include#include#define inf 99999999#define pi acos(-1.0)
#define maxn 1000050
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef long double ldb;
int dp[10][12]; //從右往左第i位為j的總方案數
void init()
for(i=2;i<=9;i++)}}
}int solve(int x)
wei[len+1]=0;
int sum=0;
for(i=len;i>=1;i--){
for(j=0;j
HDU2089 不要62 數字DP
problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...
Hdu2089 不要62 數字dp
include includeint dp 10 3 dp i 0 為位數小於等於i且不含62也不含4的數字的個數 dp i 1 為位數為i且首位為2且不含62也不含4的數字的個數 dp i 2 為位數小於等於i且含62或4的數字的個數 int digit 10 void er int wei in...
hdu 2089 不要62 (數字dp)
思路 用變數記錄吉利數,和最高位為2的吉利數還有不是吉利數的個數。code include include includeusing namespace std int dp 10 3 dp i j i表示位數,j表示狀態 dp i 0 表示不存在不吉利數字 dp i 1 表示不存在不吉利數字,且最...