OpenKattis
Saudi IOI: Intensive Selection Contest 2 (Recursion+Dynamic Programming)

Start

2019-01-03 12:15 CET

Saudi IOI: Intensive Selection Contest 2 (Recursion+Dynamic Programming)

End

2019-01-03 16:00 CET
The end is near!
Contest is over.
Not yet started.
Contest is starting in -2160 days 18:11:29

Time elapsed

3:45:00

Time remaining

0:00:00

Problem C
The Gourmet

The French gourmet Frank is a very well-respected gourmet; his job involves going around to various restaurants, eating their food and then writing a review about the restaurant. But he carries a dark secret: he is actually only interested in eating as much as possible and in any order!

However, Frank understands that a true gourmet can’t eat on just any manner, like starting with his dessert and finishing with a salad. Therefore, he asks for your help in constructing a list with all the different ways he could arrange his dishes during a serving, so he can pick the best order.

During the serving, Frank has $M$ minutes to eat. The restaurant offers $N$ different courses, and he can eat any number of portions of each course. For course $i$, it takes $T_ i$ minutes to eat a portion of it. Frank wants to eat something during every of the $M$ minutes he has, and he wants to finish all the portions that he is served. He never wants to start eating a new portion until he finished the last one.

Your task is to write a program to compute the number of ways he could arrange his meal, given these restrictions.

Input

The first line contains an integer $M$, the number of minutes, where $1 \le M \le 1\, 000$.

The second line contains an integer $N$, the number of courses, where $1 \le N \le 30$.

Afterwards, $N$ lines follow with an integer $T_ i$ on each line, the time it takes to each every dish, where $1 \le T_ i \le 200$.

Output

The program should output the number of ways in which Frank can eat during exactly $M$ minutes.

The answer will always be at most 2 billion ($2\, 000\, 000\, 000$).

Scoring

Your program will be tested on 5 test cases. For each test cases you pass, you will get 20 points.

For test cases worth 60 points, the answer will be less than 2 million ($2\, 000\, 000$).

Explanation of Sample 1

Frank is going to eat during 10 minutes and have two courses to choose from, for example a sallad (takes 3 minutes to eat) and pie (7 minutes). There are only two ways he can eat them: first pie and then sallad or vice versa. If he only eats sallad he will wither finish too quickly (3 portions = 9 minutes) or too late (4 portions = 12 minutes).

Sample Input 1 Sample Output 1
10
2
7
3
2
Sample Input 2 Sample Output 2
12
6
1
3
3
5
6
12
498