This course covers topics in Combinatorics and Algorithms Design. We comprehensively discuss basic concepts, theories, methods, and instances in Combinatorics while focusing on concepts and ideas. Selected topics include: the Pigeonhole Principle, counting, combinations, Polya counting, recurrence relations and generating functions, graph, and linear programming etc. We also discuss basic mathematics concepts in algorithms design including growth of function, Big-O notations and recurrence relations etc., and basic strategies of algorithms design including randomized algorithms, divide and conquer, and dynamic programming etc.