題目描述
猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。
輸入
第一行乙個數d,表示有d天。
接下來2*d行,每天的資料有兩行
每天的第一行兩個數n和k,表示當天摘的香蕉數和心情值
每天的第二行有n個用空格隔開的整數表示香蕉的甜度
(n<=1000,k<=100000000,d<=20)
輸出
d行,每行乙個數表示方案數,輸出對1000000007取模的結果。
樣例輸入
33 3 1 1 3
3 62 3 6
3 51 5 1
樣例輸出42
4提示
對於30%的資料:n,k<=100
對於60%的資料:n<=1000,k<=10000
對於100%的資料:n<=1000,k<=100000000,d<=20
思路
對於每種組合成k的方法,其都是k的約數,因此只需要獲得k的約數,列舉甜度和約數,根據轉移方程dp[j]=dp[j]+dp[j/i]即可推出答案
**實現
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n =
1e6+10;
const ll mod =
1000000007
;unordered_map<
int,ll>dp;
int jk[n]
,ba[n]
;int n,k;
intmain()
}sort
(jk,jk+cnt)
;for
(int i=
1;i<=n;i++)}
}printf
("%lld\n"
,dp[k]);
}return0;
}
11 02 猴猴吃香蕉
猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。揹包,依題目可得 只有k kk的約數才能作為...
問題 B 猴猴吃香蕉
題目描述 猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。輸入第一行乙個數d,表示有d天。接...
51nod 猴猴吃香蕉 揹包
猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值k,猴猴希望當天吃的香蕉滿足這麼乙個條件,這些香蕉的甜度乘積恰好等於k,但是猴猴並不知道有多少種方法,於是猴猴把這個問題交給你。m 1 08 m leq 10 8 m 10...