Eu usei a técnica de programação dinâmica várias vezes, mas hoje um amigo me perguntou como eu definia meus subproblemas, e percebi que não tinha como fornecer uma resposta formal objetiva. Como você define formalmente um subproblema para um problema que você resolveria usando a programação dinâmica?
algorithms
dynamic-programming
Daniel Gratzer
fonte
fonte
Respostas:
O princípio da programação dinâmica é pensar de cima para baixo (isto é, recursivamente), mas resolver de baixo para cima. Portanto, uma boa estratégia para projetar um PD é formular o problema recursivamente e gerar subproblemas dessa maneira.
fonte
Como o @Suresh apontou, depois que você souber que o seu problema pode ser resolvido pelo DP (ou seja, ele exibe uma subestrutura ideal e subproblemas sobrepostos), você pode pensar em uma solução dividida e conquistadora.
Portanto, pensar em uma solução de divisão e conquista fornecerá uma visão sobre o que um subproblema pode ser para o seu problema específico.
fonte
Minha experiência é descobrir uma maneira de "reduzir a enumeração redundante com a ajuda do armazenamento de valor útil já enumerado". A propósito, a Programação Dinâmica é realmente popular no ICPC (International Collegiate Programming Contest. Qualquer um pode ter seu próprio sentimento sobre o PD depois de praticar vários problemas do ICPC.
fonte