猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。
m ≤1
08
m\leq 10^8
m≤10
8,根據試除法的推論,m
mm的約束不會超過2m=
2×10
42\sqrt=2\times 10^4
2m=2×
104個。
所以我們求出m
mm的所有因數並排序,然後設f[i
]f[i]
f[i]
表示第組成第i
ii個因數的方案數,那麼我們對於讀入的x
xx,列舉m
mm的所有因數v
vv,如果x
xx是v
vv的因數,那麼就有
f [p
os[v
]]=f
[pos
[v]]
+f[p
os[v
x]
]f[pos[v]]=f[pos[v]]+f[pos[\frac]]
f[pos[
v]]=
f[po
s[v]
]+f[
pos[
xv]
]其中pos
[x
]pos[x]
pos[x]
表示x
xx是m
mm的第幾個因數。
最終答案是f[k
]f[k]
f[k]
注意m
mm的因數要從大到小排序,因為01揹包是會覆蓋原來順序的。
#include
#include
#include
#include
using
namespace std;
const
int n=
20010
,mod=
1000000007
;int t,n,m,x,k,f[n]
,v[n]
;map<
int,
int> pos;
intmain()
sort
(v+1
,v+1
+k);
for(
int i=
1;i<=k;i++
) pos[v[i]
]=i;
f[1]
=1;for
(int i=
1;i<=n;i++
)printf
("%d\n"
,f[pos[m]])
;}return0;
}
11 02 猴猴吃香蕉
猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。揹包,依題目可得 只有k kk的約數才能作為...
猴猴吃香蕉(dp)
題目描述 猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。輸入 第一行乙個數d,表示有d天。...
問題 B 猴猴吃香蕉
題目描述 猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。輸入第一行乙個數d,表示有d天。接...