日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[HDU]2089不要62

發(fā)布時間:2025/3/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [HDU]2089不要62 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://acm.hdu.edu.cn/showproblem.php?pid=2089

這道題跟Bomb(http://www.cnblogs.com/sjy123/p/3247731.html)基本一樣,不過多了一個不要包含4的條件,因為數(shù)值的范圍不大,本來這道題完全可以暴力完成的,不過既然剛學(xué)了數(shù)位DP,就用一用吧。

------------------------------------------------分割線-------------------------------------------------

狀態(tài)轉(zhuǎn)移方程

dp[i][0]=dp[i-1][0]*9-dp[i-1][1]; ? ? ? ? ? ? ? ? ? ? ? ? ? ?//不含62和4
dp[i][1]=dp[i-1][0]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //不含62和4,但2結(jié)尾
dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0]; ? ? ? ? //含62和4

不解釋了,得出的過程了Bomb基本一樣

----------------------------------------------分割線------------------------------------------------

#include"stdio.h" #include"stdlib.h" #include"string.h" int dp[20][3]; int a[20]; int fun(int len) {int i,flag=0,sum=0,last=0; //last表示一輪的位,即這輪的高一位 for(i=len;i>=1;i--){ sum+=dp[i-1][2]*a[i]; if(flag) sum+=dp[i-1][0]*a[i]; if(!flag&&a[i]>6) //本輪最高位大于6,需要加上低一位以2開頭的數(shù) sum+=dp[i-1][1];if(!flag&&last==6&&a[i]>2) //上一輪最高位等于6,要加上這輪的以2開頭的個數(shù) sum+=dp[i][1];if(!flag&&a[i]>4) //本輪最高位大于4,所以上一輪不含的數(shù),這輪加上去 sum+=dp[i-1][0];if((last==6&&a[i]==2)||a[i]==4)flag=1; last=a[i]; }return sum; } int main() {int i,len,n,m,sum1,sum2,sum,t;memset(dp,0,sizeof(dp)); //初始化 dp[0][0]=1;for(i=1;i<21;i++) //算出彼此關(guān)系,下面計算時,直接調(diào)用 { dp[i][0]=dp[i-1][0]*9-dp[i-1][1]; //不含62和4 dp[i][1]=dp[i-1][0]; //不含62和4,但2結(jié)尾 dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0]; //含62和4 }while(scanf("%d%d",&n,&m)!=EOF){if(n==0&&m==0) break; sum1=0;t=m-n+1; //n到m區(qū)間的總個數(shù) len=0; memset(a,0,sizeof(a));while(n){a[++len]=n%10;n=n/10;}a[len+1]=0;sum1=fun(len);sum2=0;len=0; memset(a,0,sizeof(a));m++;while(m){a[++len]=m%10;m=m/10;}a[len+1]=0;sum2=fun(len);printf("%d\n",t-(sum2-sum1));}// system("pause"); }

這面是暴力的作法,百度的。

#include<iostream> #include<stdio.h> using namespace std; int a[1000001]; int main() { int n,m; a[0]=1; int i; for(i=1;i<=1000000;i++) { if(i%10!=4&&i%100!=62&&a[i/10]==1) a[i]=1; else a[i]=0; } while(cin>>n>>m,n||m){ int count=0; for(int i=n;i<=m;i++) { if(a[i]==1) count++; } cout<<count<<endl; } } View Code

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/sjy123/p/3248217.html

總結(jié)

以上是生活随笔為你收集整理的[HDU]2089不要62的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。