bzoj 3679 數字之積 數字dp

2021-09-07 23:24:51 字數 938 閱讀 2053

乙個數x各個數字上的數之積記為f(x) 《不含前導零》

求[l,r)中滿足0input

第一行乙個數n

第二行兩個數l、r

output

乙個數,即滿足條件的數的個數

sample input

5 19 22

sample output

hint

100%     0很容易想到數字dp,但是因為n太大,無法直接做。

由於f(x)僅由個位數字相乘得到,所以f(x)在範圍內的取值只有5k多個(打表得到)

直接通過map標記或者離散化處理,上數字dp即可。

#include "cstdio"

#include "cstring"

#include "queue"

#include "iostream"

#include "vector"

#include "algorithm"

#include "map"

using namespace std;

const int inf = 0x3f3f3f3f;

int dig[30];

long long dp[30][10000][2];

mapmp;

long long n;

int tot=0;

void init(long long x)

}long long dfs(int pos,long long sum,bool lim,bool ok)

if(!lim)dp[pos][mp[sum]][ok]=ans;

return ans;

}long long getnum(long long n)

return dfs(cnt-1,1,1,0);

}int main()

bzoj3679 數字之積 數字dp

裸的數字dp,豪爺講課的時候秒掉了,但是後來發現會mle,於是我們做這麼一件事,考慮數字的乘積一定是2 3 5 7的多少次冪之積,於是我們對於乙個n,把可行的數字拿出來排個序編個號就好了,表示不會用新學的這種數字dp處理前導0,果斷滾回原來的dp。include include include in...

BZOJ 3679 數字之積 數字DP

description 乙個數x各個數字上的數之積記為f x 不含前導零 求 l,r 中滿足0 這題資料非常非常水 我的錯誤 幾乎一半資料範圍都過不了都ac了 好在fyc大神發現我的 錯了,看了半天,終於明白了。有這幾個錯誤 1 用log來比較數的大小。這樣是十分不精確的,平常不推薦使用。2 陣列開...

BZOJ 3679 數字之積 數字DP

還是記憶化搜尋就行,但是要用 map 記憶化。見 include include include define r register int define ll long long using namespace std namespace luitaryi ll n,l,r,num 19 len,...