I think you will enjoy Programming Pearls. It's very readable, chock-full of tips, and gave me a lot of insight on how to approach problems.
Also practicing on a class of problems repeatedly until you begin to recognize its patterns and characteristics. Online judges such as SPOJ are good for this.
I was also required to take an introduction to design and analysis of algorithms course in university. Like others have mentioned, having somebody more knowledgable like a mentor can save you a look of time and grief when you get stuck. But for me just being able to discuss and my thoughts with people like my classmates forced me to think more carefully.
Now if only I knew what that Donald Knuth guy is smoking....