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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数位DP】B-number(HDU 3652)

發布時間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数位DP】B-number(HDU 3652) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

B-number

HDU 3652

題目大意:

有一個數n,求出1~n中含‘13’且能被13整除的數有多少個

輸入樣例

13 100 200 1000

輸出樣例

1 1 2 2

解題思路:

用數位DP枚舉完每一位,同事也判斷題目要求的條件

數據范圍:

1 <= n <= 1000000000

代碼:

#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,tot,s[50],a[50][5][20]; int js(int dep,int tt,int number,bool yw)//dep表示第幾位,tt表示是否有13,number表示除以13后的余數,yw代表是否到頂了 {int num,ans;if (dep<=0) return tt==2&&!number;if (!yw&&a[dep][tt][number]) return a[dep][tt][number];//記憶化num= yw?s[dep]:9;//到頂了就不能過大ans=0;for (int i=0;i<=num;++i)if (tt==1&&i==3||tt==2) ans+=js(dep-1,2,(number*10+i)%13,yw&&i==num);//有13的else if (i==1) ans+=js(dep-1,1,(number*10+i)%13,yw&&i==num);//有一個1,下一次加3即可else ans+=js(dep-1,0,(number*10+i)%13,yw&&i==num);//其他情況if (!yw) a[dep][tt][number]=ans;//記錄return ans; } int main() {while (~scanf("%d",&n)){memset(a,0,sizeof(a));memset(s,0,sizeof(s));tot=0;while (n) s[++tot]=n%10,n/=10;//二進制化printf("%d\n",js(tot,0,0,1));//輸出} }

總結

以上是生活随笔為你收集整理的【数位DP】B-number(HDU 3652)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。