This document presents an overview of the knapsack problem in the context of integer programming, detailing its formulation as a binary integer program and the methods for finding optimal solutions using primal and dual bounds. It discusses various approaches including greedy heuristics, linear relaxation, and depth-first branch and bound techniques to manage the problem's NP-hard nature. The presentation concludes with references for further study on discrete optimization and integer programming.