A programação dinâmica (Programação Dinâmica, abreviadamente DP) é uma ideia algorítmica comumente usada para resolver problemas de otimização. Geralmente é usado para resolver problemas com propriedades de subproblemas sobrepostas e propriedades ótimas de subestrutura.
Aqui está um exemplo que mostra como usar o algoritmo de programação dinâmica para resolver o problema da mochila:
function knapsack(items, capacity) {
const n = items.length;
const dp = Array(n + 1).fill(Array(capacity + 1).fill(0));
for (let i = 1; i <= n; i++) {
const weight = items[i - 1].weight;
const value = items[i - 1].value;
for (let j = 1; j <= capacity; j++) {
if (weight <= j) {
dp[i][j] = Math.max(value + dp[i - 1][j - weight], dp[i - 1][j]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
return dp[n][capacity];
}
const items = [
{ weight: 2, value: 6 },
{ weight: 2, value: 10 },
{ weight: 3, value: 12 }
];
const capacity = 5;
console.log(knapsack(items, capacity)); // 输出:22
O exemplo acima resolve um problema de mochila com três itens, cada um com peso e valor correspondentes. Precisamos escolher itens que maximizem o valor total para uma determinada capacidade de mochila. Na programação dinâmica, um array bidimensional `dp` é usado para salvar o estado, onde `dp[i][j]` representa o valor máximo que pode ser obtido quando a capacidade da mochila é `j` entre os primeiros `i ` itens. valor. Ao preencher esta matriz bidimensional, podemos obter o valor máximo final.
Espero que os exemplos acima possam ajudá-lo a compreender o algoritmo de programação dinâmica. Se você tiver mais dúvidas, fique à vontade para perguntar!