Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2013, 14:25   #1
mmaksimus
Новичок
Джуниор
 
Регистрация: 03.06.2013
Сообщений: 1
Вопрос Задача о рюкзаке на минимальную стоимость при полной загрузке (C#)

Имеется стандартная задача о рюкзаке с возможностью повторения предметов, вот мой код переделанный с C++ на C#, взятый отсюда.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace kursTPR1
{
    class kursTPR1
    {
        static void Main(string[] args)
        {
            int[] weights = new int[10]; //вес
            int[] costs = new int[10]; //цена
            int needed = 1000; //размер рюкзака
 
            weights[0] = 2; costs[0] = 1;
            weights[1] = 4; costs[1] = 5;
            weights[2] = 5; costs[2] = 7;
            weights[3] = 1; costs[3] = 3;
            weights[4] = 3; costs[4] = 4;
            weights[5] = 7; costs[5] = 6;
            weights[6] = 1; costs[6] = 3;
            weights[7] = 6; costs[7] = 5;
            weights[8] = 5; costs[8] = 2;
            weights[9] = 4; costs[9] = 5;
 
            knapsack(weights, costs, needed);
        }
 
        static void knapsack(int[] weights, int[] costs, int needed)
        {
            int n = weights.Length;
            int[] dp = new int[needed + 1];
            for (int i = 1; i <= needed; i++)
            {
                dp[i] = dp[i - 1];
                for (int j = 0; j < n; j++)
                {
                    if (weights[j] <= i)
                    {
                        dp[i] = Math.Max(dp[i], dp[i - weights[j]] + costs[j]);
                    }
                }
            }
            Console.WriteLine(dp[1000]);
            Console.ReadKey();
        }
    }
}
Помогите исправить код для нахождения минимальной суммарной цены при полной загрузке рюкзака(т.е. на 1000). Простое изменение Max на Min даёт нули на весь массив стоимостей(dp[]).
Для облегчения проверки правильности решения максимальная и минимальная сумма, посчитанные конкретно для этого кода равны 3000 и 400 соответственно. Выручайте, вторые сутки уже бьюсь, или ткните на реализацию уравнения Беллмана, считающую минимальную стоимость предметов при полной загрузке рюкзака.
mmaksimus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о рюкзаке. Lucid Visual C++ 2 08.11.2011 20:04
Задача о Рюкзаке. Lucid Visual C++ 3 07.11.2011 11:40
Задача о Рюкзаке. Lucid Помощь студентам 0 07.11.2011 09:34
Задача о рюкзаке VadEr Помощь студентам 6 16.09.2011 20:44