猴猴吃香蕉(dp)

2021-09-29 09:00:11 字數 1258 閱讀 3483

題目描述

猴猴最愛吃香蕉了。每天猴猴出門都會摘很多很多的香蕉,每個香蕉都有乙個甜度,猴猴不一定要把所有的香蕉都吃掉,猴猴每天都有乙個心情值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...