题意:猴猴每天会摘很多香蕉,每个香蕉有一个甜度。猴猴每天有一个心情值
解析:这题一看就是个很明显的背包。
但是由于
其中
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<map>
#define INF 1e9
using namespace std;
const int maxn=1010;
const int mod=1e9+7;
int d,n,a[maxn],cnt;
long long p[maxn*100],k;
map<long long,long long> dp;
int main()
{
freopen("banana.in","r",stdin);
freopen("banana.out","w",stdout);
scanf("%d",&d);
while(d--)
{
cnt=0;
dp.clear();
scanf("%d%lld",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int q=sqrt(k);
for(int i=1;i<=q;i++)
if(k%i==0)
{
p[++cnt]=i;
if(i*i!=k)
p[++cnt]=k/i;
}
sort(p+1,p+cnt+1);
for(int i=1;i<=n;i++)
{
if(!a[i])
continue;
for(int j=cnt;j>=1;j--)
if(p[j]%a[i]==0)
{
dp[p[j]]=(dp[p[j]]%mod+dp[p[j]/a[i]]%mod)%mod;
if(p[j]==a[i])
dp[p[j]]=(dp[p[j]]%mod+1)%mod;
}
}
printf("%lld\n",dp[k]%mod);
}
return 0;
}