Я борюсь со следующей проблемой: учитывая набор из n элементов, найдите максимальную сумму подмножества размера k, которое строго меньше и как можно ближе к заданному числу m.
Я решил проблему без ограничения, что подмножество должно иметь размер k, и это мой код (nums - это массив, в котором я сохраняю свои n чисел):
// clear the dp array
int dp[n+1][m+1];
for(int i = 0; i < n+1; i++)
for(int j = 0; j < m+1; j++)
dp[i][j] = 0;
for(int j = 1; j <= n; j++)
{
for(int w = 1; w < m; w++)
{
if(nums[j-1] <= w) dp[j][w] = max(dp[j-1][w], nums[j-1] + dp[j-1][w - nums[j-1]]);
else dp[j][w] = dp[j-1][w];
}
}
cout << dp[n][m-1];
Однако я не уверен, как расширить свой код, чтобы дать ответ с подмножествами размера k. Я думал о том, чтобы иметь еще одно измерение в таблице, которое отслеживает уже добавленные элементы, но я не уверен, как это реализовать. Я уже искал этот сайт, но не нашел конкретного ответа, который помог бы мне написать код.
Может ли кто-нибудь помочь мне с этим?
Заранее спасибо!