On this page you will find a listing of material which you might consider
studying in order to improve your problem solving skills.

## Online material

The Hitchiker's Guide to
Programming Contests. This is a very nice document about many of the
techniques and algorithms needed to solve problems at online judges. The
document is not for beginners, but it is still worth a read. It is one of the
best documents I have ever read about solving problems at online judges.
Furthermore there are a lot of nice implementations of various algorithms and
data structures in C++. Their computational geometry library is quite good and
so is their maximum cardinality bipartite matching algorithm. The document
covers dynamic programming, many areas of graph theory, matrices, number
theory, computational geometry and more.

Art of Programming
Contest by Ahmed Shamsul Arefin. This is an online book about problem solving at online judges.
The book covers a lot of the standard algorithms and data structures needed for problem solving. It is definitely
worth a read for beginners and semi-experienced problem solvers. Unfortunately the book is full of minor errors.

## Books

**Introduction to algorithms** by Cormen, Leiserson, Rivest and Stein (usually just called CLRS).
This is a widely used book about algorithms and data structures. It is quite rigorous and covers
many important areas about algorithms that are definitely useful to problem solving on the
various online judges.

**Concrete Mathematics: A Foundation for Computer Science** by Knuth, Patashnik and Graham.
This is a very nice book about many important areas for Computer Science. It
covers a lot discrete mathematics and also a lot of special areas. It is
however quite hard to read, so a certain level of mathematical maturity is
essential to be able to read this book. After having read this book and solved
a lot of problems, it will come to your attention that many problems are based
on exercises or passages from this book.

** Programming Challenges: The Programming Contest Training Manual** by Steven Skiena and Miguel Revilla. This is a
book about problem solving and about solving problems at online judges. It is
definitely worth a read if you are a beginner. However the book fails to
deliver its promises, because the problems given in the book are almost
impossible to solve just by reading the book.