傳送門
數字dp**好…
乘積太大儲存不下來腫麼辦?
這乘積都是
1 到
9的數字乘起來滴,於是乎用質因數表示就好了,特別注意對每一種質數的最大個數最好卡著開陣列,要不然很容易mle滴…
原諒蒟蒻太弱,**為了放錯就寫的很醜= =
#include
#include
#include
#define ll long long int
using
namespace
std;
int n, w[20], len;
ll p2[31], p3[20], p5[14], p7[12];
ll l, r, f[20][31][20][14][12][2];
inline
void add(int num,int l,int a,int b,int c,int d,int t,ll p)
ll cal(ll m)
add(w[len],len,0,0,0,0,1,1);
for(int i=w[len]-1;i;--i)add(i,len,0,0,0,0,0,1);
for(int i=len;i;--i)add(1,i,0,0,0,0,0,1);
for(int i=len-1;i;--i)
}ll ans=0;
for(int a=0;p2[a]<=n;++a)
for(int b=0, e=n/p2[a];p3[b]<=e;++b)
for(int c=0, e2=e/p3[b];p5[c]<=e2;++c)
for(int d=0, e3=e2/p5[c];p7[d]<=e3;++d)
if(p2[a]*p3[b]*p5[c]*p7[d]<=n)
ans+=f[1][a][b][c][d][0]+f[1][a][b][c][d][1];
return ans;
}int main()
數字DP BZOJ 3679 數字之積
還有最最開始的錯誤做法 我是直接記錄乘積是不是滿足條件的狀態 sta 0 乘積無意義 sta 1 乘積為0 sta 2 乘積 n sta 3 乘積 n.但是這個顯然就錯了叭。因為相同的sta的可能乘積並不相同,也就是說並不具有無後效性。可能跑完這個數字就更新了dp pos sta 但是其他的乘積的時...
數字DP BZOJ 3876 支線劇情
輸入一行包含乙個正整數n。接下來n行,第i行為i號劇情點的資訊 第乙個整數為,接下來個整數對,bij和tij,表示從劇情點i可以前往劇 情點,並且 這段支線劇情需要花費的時間。輸出一行包含乙個整數,表示jyy看完所有支線劇情所需要的最少時間。6 2 2 1 3 2 2 4 3 5 4 2 5 5 6...
數字DP之找等凹數字
include include include include include include include include include include include include using namespace std long long dp 20 20 10 2 2 2 int nu...