## Welcome to Computer Science Stack Exchange

Computer Science Stack Exchange is a question and answer site for students, researchers and practitioners of computer science. It's built and run by you as part of the Stack Exchange network of Q&A sites. With your help, we're working together to build a library of detailed answers to every question about computer science.

We're a little bit different from other sites. Here's how:

This site is all about getting answers. It's not a discussion forum. There's no chit-chat.

Just questions...

up vote

Good answers are voted up and rise to the top.

The best answers show up first so that they are always easy to find.

accept

Accepting doesn't mean it's the best answer, it just means that it worked for the person who asked.

# Deciding on Sub-Problems for Dynamic Programming

I have used the technique of dynamic programming multiple times however today a friend asked me how I go about defining my sub-problems, I realized I had no way of providing an objective formal answer. How do you formally define a sub-problem for a problem that you would solve using dynamic programming?

The principle of dynamic programming is to think top-down (i.e recursively) but solve bottom up. So a good strategy for designing a DP is to formulate the problem recursively and generate sub-problems that way.

My experience is finding out a way to "cut down redundant enumerating with help of storing useful value already enumerated". By the way, Dynamic Programming is really popular in ICPC(International Collegiate Programming Contest. Anyone can have his own feeling about DP after practice several ICPC problems.

## Get answers to practical, detailed questions

Focus on questions about an actual problem you have faced. Include details about what you have tried and exactly what you are trying to do.

• algorithms, models of computation
• programming language semantics, formal methods
• computer architecture, networks
• machine learning, artificial intelligence, knowledge representation, natural language processing
• vision, graphics

or any other topic in theoretical or applied computer science at any level.

You can use MathJax formatting for mathematical notation; see this tutorial.

Not all questions work well in our format. Avoid questions that are primarily opinion-based, or that are likely to generate discussion rather than answers.

Questions that need improvement may be closed until someone fixes them.

• Programming questions, even if they are homework for a class in a computer science curriculum (try Stack Overflow)
• How a particular piece of software or hardware works (this site is about computer science)

## Tags make it easy to find interesting questions

All questions are tagged with their subject areas. Each can have up to 5 tags, since a question might be related to several subjects.

Click any tag to see a list of questions with that tag, or go to the tag list to browse for topics that interest you.

# Deciding on Sub-Problems for Dynamic Programming

I have used the technique of dynamic programming multiple times however today a friend asked me how I go about defining my sub-problems, I realized I had no way of providing an objective formal answer. How do you formally define a sub-problem for a problem that you would solve using dynamic programming?

## You earn reputation when people vote on your posts

+5 question voted up
+2 edit approved

As you earn reputation, you'll unlock new privileges like the ability to vote, comment, and even edit other people's posts.

Reputation Privilege
15 Vote up
125 Vote down (costs 1 rep on answers)

At the highest levels, you'll have access to special moderation tools. You'll be able to work alongside our community moderators to keep the site focused and helpful.

500 Vote to close, reopen, or migrate questions Edit other people's posts Access to moderation tools
see all privileges

## Improve posts by editing or commenting

Our goal is to have the best answers to every question, so if you see questions or answers that can be improved, you can edit them.

Use edits to fix mistakes, improve formatting, or clarify the meaning of a post.

You can always comment on your own questions and answers. Once you earn 50 reputation, you can comment on anybody's post.

Remember: we're all here to learn, so be friendly and helpful!

The principle of dynamic programming is to think top-down (i.e recursively) but solve bottom up. So a good strategy for designing a DP is to formulate the problem recursively and generate sub-problems that way.

I claim that's the only strategy. - JeffE Mar 22 '12 at 9:35

## Unlock badges for special achievements

Badges are special achievements you earn for participating on the site. They come in three levels: bronze, silver, and gold.