*You are given n activities with their start and finish times. Select the maximum number of activities that can be performed by a single person, assuming that a person can only work on a single activity at a time.*

Example:

Example 1 :Consider the following 3 activities sorted by finish time. start[] = {10, 12, 20}; finish[] = {20, 25, 30}; A person can perform at mosttwoactivities. The maximum set of activities that can be executed is {0, 2} [ These are indexes in start[] and finish[] ]Example 2 :Consider the following 6 activities sorted by by finish time. start[] = {1, 3, 0, 5, 8, 5}; finish[] = {2, 4, 6, 7, 9, 9}; A person can perform at mostfouractivities. The maximum set of activities that can be executed is {0, 1, 3, 4} [ These are indexes in start[] and finish[] ]

## C#

`// The following implementation assumes ` `// that the activities are already sorted ` `// according to their finish time ` `using` `System; ` ` ` `class` `GFG { ` ` ` `// Prints a maximum set of activities ` ` ` `// that can be done by a single ` ` ` `// person, one at a time. ` ` ` `// n --> Total number of activities ` ` ` `// s[] --> An array that contains start ` ` ` `// time of all activities ` ` ` `// f[] --> An array that contains finish ` ` ` `// time of all activities ` ` ` `public` `static` `void` `printMaxActivities(` `int` `[] s, ` ` ` `int` `[] f, ` `int` `n) ` ` ` `{ ` ` ` `int` `i, j; ` ` ` ` ` `Console.Write(` `"Following activities are selected : "` `); ` ` ` ` ` `// The first activity always gets selected ` ` ` `i = 0; ` ` ` `Console.Write(i + ` `" "` `); ` ` ` ` ` `// Consider rest of the activities ` ` ` `for` `(j = 1; j < n; j++) { ` ` ` `// If this activity has start time greater than or ` ` ` `// equal to the finish time of previously selected ` ` ` `// activity, then select it ` ` ` `if` `(s[j] >= f[i]) { ` ` ` `Console.Write(j + ` `" "` `); ` ` ` `i = j; ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `int` `[] s = { 1, 3, 0, 5, 8, 5 }; ` ` ` `int` `[] f = { 2, 4, 6, 7, 9, 9 }; ` ` ` `int` `n = s.Length; ` ` ` ` ` `printMaxActivities(s, f, n); ` ` ` `} ` `} ` ` ` `// This code is contributed ` `// by ChitraNayal ` |

*chevron_right*

*filter_none*

**Output:**

Following activities are selected : 0 1 3 4

Please refer complete article on Activity Selection Problem | Greedy Algo-1 for more details!

## Recommended Posts:

- C# Program for Dijkstra's shortest path algorithm | Greedy Algo-7
- C# Program for Subset Sum Problem | DP-25
- C# Program for Naive algorithm for Pattern Searching
- C# Program for KMP Algorithm for Pattern Searching
- C# Program to print all permutations of a given string
- C# Program for Count Inversions in an array | Set 1 (Using Merge Sort)
- C# Program for Median of two sorted arrays of same size
- C# Program for Maximum sum rectangle in a 2D matrix | DP-27
- C# Program for Largest Sum Contiguous Subarray
- C# Program for Maximum size square sub-matrix with all 1s
- C# Program for Minimum number of jumps to reach end
- C# Program for Cutting a Rod | DP-13
- C# Program for Longest Palindromic Subsequence | DP-12
- C# Program for Egg Dropping Puzzle | DP-11
- C# Program for Matrix Chain Multiplication | DP-8
- C# Program for Count set bits in an integer
- C# Program to Find the Number Occurring Odd Number of Times
- C# Program for Anagram Substring Search (Or Search for all permutations)
- C# Program to Count number of binary strings without consecutive 1's
- C# Program for Count ways to reach the n\'th stair