程式設計題 小Q的歌單(動態規劃)

2022-06-04 02:12:10 字數 1168 閱讀 7298

輸入描述:

每個輸入包含乙個測試用例。

每個測試用例的第一行包含乙個整數,表示歌單的總長度k(1<=k<=1000)。

接下來的一行包含四個正整數,分別表示歌的第一種長度a(a<=10)和數量x(x<=100)以及歌的第二種長度b(b<=10)和數量y(y<=100)。保證a不等於b。

輸出描述:

輸出乙個整數,表示組成歌單的方法取模。因為答案可能會很大,輸出對1000000007取模的結果。
示例1

5

2 3 3 3

9

解決思路:

1. 用陣列dp來儲存結果,dp[i][j]表示用前j首歌表示長度為i的歌單的方法數,i=1…k,j=1,…,na+nb。na是第1種歌的數量,nb是第2種歌的數量 

2. lens[j]表示第j首歌的長度,如果i>=lens[j],那麼由前j首歌組成長度為i的歌單的方法數可分為兩部分,第一部分是dp[i][j-1],即由前j-1首歌組成長度

為i的歌單的方法數,第二部分是dp[i-lens[j]][j-1],即由j-1首歌組成長度為i-lens[j]的歌單的方法數,因為第j首歌已經佔據了lens[j]的長度。 

3. 如果i

ns[j

]'>i][j]

'>[i][j]

[i][j]等於dp[i]

[j−1

]'>[i][j−1]

[i][j−1]。

**:

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int mod =1000000007

;int

k;int

a,x,b,y;

int dp[1010][210

];int len[210

];int

main()

else

}cout

return0;

}

小Q的歌單(2)

小q有x首長為a的不同的歌和長為y首長度為b的不同的歌,從種選取任意首,組成長度為k的歌單,每首歌只能被選取一次,不考慮歌單內歌曲的先後順序,問有多少種組成方法。第一行是乙個整數,表示歌單的總長度為k。第二行有四個整數,a 10 x 100 b 10 y 100 分別代表第一種長度和數量,第二種長度...

騰訊筆試 小Q的歌單

時間限制 1秒 空間限制 32768k 小q有x首長度為a的不同的歌和y首長度為b的不同的歌,現在小q想用這些歌組成乙個總長度正好為k的歌單,每首歌最多只能在歌單 現一次,在不考慮歌單內歌曲的先後順序的情況下,請問有多少種組成歌單的方法。輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙...

騰訊筆試題 小Q的歌單

題目描述 小q有x首長度為a的不同的歌和y首長度為b的不同的歌,現在小q想用這些歌組成乙個總長度正好為k的歌單,每首歌最多只能在歌單中出現一次,在不考慮歌單內歌曲的先後順序的情況下,請問有多少種組成歌單的方法。輸入描述 每個輸入包含乙個測試用例 每個測試的第一行包含乙個整數,表示歌單的總長度k 1 ...