-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCount ways to reach the n’th stair generalised.cpp
69 lines (60 loc) · 1.51 KB
/
Count ways to reach the n’th stair generalised.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
There exists a staircase with N steps, and you can climb up either 1 or 2 steps at a time.
Given N, write a function that returns the number of unique ways you can climb the staircase.
The order of the steps matters.
For example, if N is 4, then there are 5 unique ways:
1, 1, 1, 1
2, 1, 1
1, 2, 1
1, 1, 2
2, 2
What if, instead of being able to climb 1 or 2 steps at a time, you could climb any number from a
set of positive integers X? For example, if X = {1, 3, 5}, you could climb 1, 3, or 5 steps at a time.
*/
#include<bits/stdc++.h>
using namespace std;
void countWays(int, int);
//int _countWays(int, int[], int);
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t, n, m;
cin >> t;
while(t--){
cin >> n >> m;
countWays(n, m);
cout << endl;
}
return 0;
}
/*recursion
int _countWays(int n, int arr[], int m){
if(n == 0){
return 1;
}
else{
int temp = 0;
for(int i = 0; i < m; i++){
if(n - arr[i] >= 0)
temp += _countWays(n - arr[i], arr, m);
}
return temp;
}
}
*/
void countWays(int n, int m){
int arr[m], store[n + 1];
for(int i = 0; i < m; i++)
cin >> arr[i];
store[0] = 1;
for(int i = 1; i <= n; i++){
int temp = 0;
for(int j = 0;j < m; j++){
if(i - arr[j] >= 0)
temp += store[i - arr[j]];
}
store[i] = temp;
}
cout << store[n];
//cout << _countWays(n, arr, m);
}