【還有最最開始的錯誤做法】我是直接記錄乘積是不是滿足條件的狀態: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 陣列開...