HDU2089——不要62(數位dp入門)
不要62
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 35612 Accepted Submission(s): 12972
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
Author qianneng
Source 和bomb的寫法基本是一樣的。
mark一下幾個需要注意的地方。一個是分類討論,低位該位高位影響都要考慮到。一個不要忘記算該數本身。細心細心細心!
#include <cmath> #include <cstring> #include <cstdio> #include <vector> #include <string> #include <algorithm> #include <string> #include <map> #include <queue> #include <set> #include <stack> #include <ctime> #include <cstdlib> #include <cctype> #include <iostream> #include <fstream> using namespace std; #define MAXN 400010 #define LEN 200010 #define INF 1e9+7 #define MODE 1000000 #define pi acos(-1) #define g 9.8 typedef long long ll; long long dp[10][3]; /* * dp[i][0],表示不含有不吉利數字 * dp[i][1],表示不含有不吉利數字,且最高位為2 * dp[i][2],表示含有不吉利數字 */ void init() { dp[0][0]=1; dp[0][1]=0,dp[0][2]=0; for(int i=1;i<10;i++){ dp[i][0]=9*dp[i-1][0]-dp[i-1][1]; dp[i][1]=dp[i-1][0]; dp[i][2]=dp[i-1][0]+dp[i-1][1]+10*dp[i-1][2]; } } long long solve(int n){ long long ans=0; int bit[10]; int k=n; int num=1; while(n){ bit[num++]=n%10; n/=10; } bit[num]=0; bool flag=false; for(int i=num-1;i>0;i--){ ans+=dp[i-1][2]*bit[i]; if(flag) ans+=dp[i-1][0]*bit[i]; else{ if(bit[i]>4){ ans+=dp[i-1][0]; } if(bit[i+1]==6&&bit[i]>2){ ans+=dp[i][1]; } if(bit[i]>6){ ans+=dp[i-1][1]; } if(bit[i]==4||(bit[i]==2&&bit[i+1]==6)){ flag=true; } } } if(flag) ans++; return k-ans; } int main() { int n,m; init(); while(scanf("%d%d",&m,&n)!=EOF){ if(n==0&&m==0){ return 0; } printf("%lld\n",solve(n)-solve(m-1)); } }
相關推薦
HDU2089——不要62(數位dp入門)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 35612 Accepted Submiss
hdu2089 不要62(數位dp模板)
ac程式碼:#include<iostream> #include<cstring> #include<algorithm> #define r(n) scanf("
【HDU2089】不要62(數位DP入門題)
Description 給定mm,nn,求mm到nn的所有整數中及不含’4’也不含’62’的數的個數。 Solution 直接數位DP即可。。。 Source /*************
HDU2089 ------不要62(數位dp)
判斷 tom name pop iostream blank 位置 play show 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others
HDU2089 不要62(數位DP)
傳送門 【題目分析】 和windy數一題類似,不過限制條件改為了連續的62和4,列舉當前位填的數字的時候判斷一下即可。 【程式碼~】 #include<bits/stdc++.h> using namespace std; typedef long long LL; co
hdu2089 不要62 (數位DP)
hdu2089 刷DP ,經典數位DP 思路: 1. 確定狀態 dp[ i ] [ j ] 表示i位數,在第i位上 以數值j開頭的值 ,含有符合情況的數的個數
hdu--2089 不要62(數位DP的入門題目)
題目連結:不要62 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 53366
2018.09.29【HDU2089】不要62(數位DP)
傳送門 解析: 今天突然發現自己還沒寫過數位DPDPDP入門題。。。 思路: 我們從高位向低位DP,採用記憶化搜尋。 初始化fff陣列為−1-1−1,因為我們可能DPDPDP到某個狀態是沒有合法數的。
HDU 2089 不要62(數位DP)
註意 break 大小 printf bre 表示 += 理解 ini 題意:求[n,m]內所有數字中不出現4也不出現連續62的數的個數。 輸入:n m,多組數據,以0 0結尾。 輸出:符合條件的數的個數。 限制:(0<n≤m<1000000) 時間:1000
HDU - 2089 不要62(數位DP)
include scrip panel ans using 交通 += init 遇到 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 題目: Problem Description 杭州人稱那些傻乎乎粘嗒嗒的人
HDU 2089 不要62【數位DP入門題】
pan eps ava con 所有 數據 strong mon sub 不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi
hdu 3555 Bomb(數位dp入門)
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 24148 Accepted Submissi
HDU2089 不要62【數位DP】
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28103 Accepted Submissi
HDU2089 不要62【數位DP 基礎】
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 60064 Accepted Submissio
不要62 【數位dp的入門題】
不要62Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 50740 Accepted Submi
杭電 hdu 2089 不要62【數位dp】【入門】
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29117 Accepted Submiss
【51nod 1021】石子歸併(區間dp入門)
1021 石子歸併 基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級演算法題 收藏 關注 N堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的代價。計算將N堆石子合併成一堆的最小代價。
51Nod1009 數字1的數量(數位dp演算法)
數位dp演算法: void dfs(int a,int b,int c[]) { ll n=a/10,m=a%10,t=n; for(int i=0;i<=m;i++) c[i]+=b;//當前位對低位的影響 for(int i=0;i<10;i++)
(樹形dp入門)
題目一:Anniversary party 題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1520 題意:有n個客人,每個客人有一個開心值,然後客人K是客人L的主管,客人K和客人L不能一起被邀請參加party,問:邀請人的最大開
hdu 2089 不要62【數位dp】
題意:給定一個範圍n~m,求出數中不存在4和連續62的數的個數。 數位dp經典入門題。 #include<bits/stdc++.h> using namespace std; #define ll long long int digit[20]; ll dp