hdu2089 不要62 数位dp
生活随笔
收集整理的這篇文章主要介紹了
hdu2089 不要62 数位dp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不要62
Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 42973????Accepted Submission(s): 15726
杭州交通管理局經常會擴充一些的士車牌照,新近出來一個好消息,以后上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。
不吉利的數字為所有含有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 迎接新學期——超級Easy版熱身賽?
Recommend lcy???|???We have carefully selected several similar problems for you:??2094?2090?2091?2093?2092? 一道數位dp,開始想暴力解結果超時,然后想先把每個百位,千位數求出來簡化再暴力,然后發現太復雜了,最后百度才想到數位dp,唉 dp還是沒入門,看題目的時候思維完全沒往那方面想 貼出代碼,代碼當中有解析 參考了這位大大 ?http://www.cnblogs.com/wenruo/p/4725005.html #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<cstdio> using namespace std; typedef long long ll; #define maxn 100010 int dp[10][10],d[10]; void init() {dp[0][0] = 1;for(int i=1;i<=7;i++)for(int j=0;j<=9;j++)for(int k=0;k<=9;k++){if(j!=4&&!(j==6&&k==2))dp[i][j] += dp[i-1][k];//把每一位上的下一位有多少個可以的數算出來 } } int solve(int num) {int ans = 0,len = 0;while(num){len++;d[len] = num%10;num /= 10;}d[len+1] = 0;for(int i=len;i>=1;i--){for(int j=0;j<d[i];j++){if(d[i+1]!=6||j!=2)ans += dp[i][j];//加上除了d[i]這位數之外的其他數的和 }if(d[i]==4||(d[i+1]==6&&d[i]==2))break;//如果d[i]不滿足條件的話就可以直接結束循環,不必再加最后一位 }return ans; } int main() {int n,m;init();while(cin >> n >> m){if(!n&&!m)break;printf("%d\n",solve(m+1)-solve(n));//注意m+1,求的是小于m的數,所以求[0,m]之間的數時要加一 }return 0; }?
轉載于:https://www.cnblogs.com/l609929321/p/7044444.html
總結
以上是生活随笔為你收集整理的hdu2089 不要62 数位dp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ceph中的序列化
- 下一篇: spring in action小结4.