C 程式設計 小Q的歌單(騰訊模擬筆試題)

2021-08-26 23:15:53 字數 1393 閱讀 6611

[程式設計題]小q的歌單

這題事後搞了很久,主要是要考慮時間複雜度的問題,常規的思路是可以行通的,但是通不過所有的用例,用例範圍一旦很大,就會超出運算時間,導致程式不通過。在沒考慮楊輝三角的時候,僅通過60%的測試用例。

題目描述

小q有x首長度為a的不同的歌和y首長度為b的不同的歌,現在小q想用這些歌組成乙個總長度正好為k的歌單,每首歌最多只能在歌單中出現一次,在不考慮歌單內歌曲的先後順序的情況下,請問有多少種組成歌單的方法。

輸入描述:

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

每個測試用例的第一行包含乙個整數,表示歌單的總長度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

正確答案:

//採用陣列楊輝三角 c(n,k)=c(n-1,k)+c(n-1,k-1)

#include

#include

using

namespace

std;

long

long c[105][105];

const

int mod = 1000000007;

void init()

} }int main()}}

}printf("%ld\n",sum%1000000007);

}return

0; }

時間複雜度過大(通過60%)

#include 

using

namespace

std;

long

long num;

//求組合數c(m,k)個數,k>=1

int comb(int m, int k)//(c(m,k))

else

}return num;

}int main()

long

long sum = 0;

for (int i = 0; i < x; ++i) }}

cout

<< sum % 1000000007

<< endl;

return

0;}

騰訊筆試題 小Q的歌單

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

騰訊筆試 小Q的歌單

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

騰訊2018秋招筆試真題 小Q的歌單

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