The course discusses underlying theory and fundamental solution methodologies for linear and nonlinear integer programming. Theoretical topics include general solution concepts such as relaxation, partition and bounds, submodularity, and duality theory. Solution methods covers partial enumeration methods, dynamic programming methods, branch and bound methods, cutting plane methods, convergent Lagrangian dual methods, convexification methods and global descent methods. These methods can be respectively applied to solve separable/non-separable and convex/non-convex integer programming problems, including nonlinear knapsack problems, quadratic integer programming, and zero-one polynomial integer programming. The course also discusses various applications of integer programming in engineering, management and finance.