數字DP BZOJ 3679 數字之積

2021-10-02 00:23:15 字數 1081 閱讀 4577

【還有最最開始的錯誤做法】我是直接記錄乘積是不是滿足條件的狀態:sta == 0: 乘積無意義;sta == 1: 乘積為0;sta == 2: 乘積<=n;sta == 3: 乘積 > n.   但是這個顯然就錯了叭。因為相同的sta的可能乘積並不相同,也就是說並不具有無後效性。可能跑完這個數字就更新了dp[pos][sta],但是其他的乘積的時候可能是相同的狀態,但是卻直接返回了之前有的。所以錯!

#include #include #include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f

#define lowbit(x) x & (-x)

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

const int maxn = 5200 + 5;

const ll pri[4] = ;

ll n, l, r;

int a[20];

ll dp[20][maxn];

int cnt;

mapmp;

void pre()

mp[tmp] = cnt ++;

st.erase(tmp);

for(int i = 0; i < 4; i ++ )

st.insert(tmp * pri[i]);

}}ll dfs(int pos, ll mul, bool lead, bool limit)

if(!limit && !lead)

dp[pos][mp[mul]] = ans;

return ans;

}ll solve(ll x)

return dfs(pos - 1, 0, true, true);

}int main()

return 0;}/*

1 1 1000000000000000000

ans = 18

*/

數字DP BZOJ3629數字之積

傳送門 數字dp 好 乘積太大儲存不下來腫麼辦?這乘積都是 1 到 9的數字乘起來滴,於是乎用質因數表示就好了,特別注意對每一種質數的最大個數最好卡著開陣列,要不然很容易mle滴 原諒蒟蒻太弱,為了放錯就寫的很醜 include include include define ll long long...

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 陣列開...