Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.10.2014
Сообщений: 28

Решение задачи про рюкзак

21.04.2016, 22:02. Показов 755. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте помогите есть ли у кого нибудь программа о решение задач про рюкзак на форме c# или дельфи нашел один код но не могу его поставить на форму помогите пожалуйста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
public static int maxCost = 0; // максимальная стоимость
        public static int MaxWeight = 0; // ограничение веса
        public static int n = 0;  // количество элементов массива
        public static string strTable, symstr; // вспомогательный строки
        public static int count;
        table Form1 = new Table();
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (restrictionmas.Text == "" || restrictionmas.Text == "0")  // Проверка ввода
            {
                MessageBox.Show("Введите ограничение веса!");
                return;
            }
            if (dataBox.Text == "") // Проверка ввода
            {
                MessageBox.Show("Введите предметы!");
                return;
            }
         // количество строк
        //
        MaxWeight = Convert.ToInt32(restrictionmas.Text);
        count = 0;
        string t = dataBox.Text.Trim();
        string strName = "";
        int p = 1; bool w=false;
        // цикл для взятие из строки t (со всеми данными), только наименования предметов в strname
        for (int i = 0; i < t.Length; i++)
        {
            if (t[i] == '"')
            {
                p += 1;
                w = true;
            }
            if (p % 2 == 0 || w)
            {
                strName += t[i];
            }
            if (w && p % 2 != 0)
                strName += "\n";
            w = false;
          
        }
        // разбиение на массив имен
        string[] masName = strName.Split('\n');
        string[] str = t.Split(',', '\n');
        int b = 0;
        n = masName.Length;
        int[] c = new int[n];
        int[] m = new int[n];
        int[] a = new int[n];
        // Разбиение строки на массив масс и стоимостей
        for (int j = 0; j < str.Length && b+1 <= n; j++)
        {
            c[b] = Convert.ToInt32(str[j + 1]);
            m[b] = Convert.ToInt32(str[j + 2]);
            j = j + 2;
            b++;
        }
        search(0, a, c, m, MaxWeight, 0, 0);
        if (strTable == null) { MessageBox.Show("Вес всех предметов больше ограничения!"); return; }
        string[] strstrTable = strTable.Split('\n');
        result.Text = Convert.ToString(maxCost);
        maxCost = 0;
        form.Hide();
        form.grid.DataSource = null;
        form.grid.ColumnCount = n;
        // Заполнение наименования столбцов
        for (int i = 0; i < n; i++)
        {
            form.grid.Columns[i].HeaderText = masName[i];
        }
        string[] massym = symstr.Split(' ');
        form.grid.RowHeadersWidth = 120;
        // Добавление строки в таблицу
        for (int i = 0; i < count; i++)
        {
            form.grid.Rows.Add();
            resultBox.Clear();
            form.grid.Rows[i].HeaderCell.Value = massym[i];
            string buf = strstrTable[i];
            for (int j = 0; j < form.grid.Columns.Count-1; j++)
            {
                form.grid.Rows[i].Cells[j].Value = buf.Substring(j, 1);
                if (buf.Substring(j, 1) == "1")
                    resultBox.Text += masName[j] + "\n";
            }
        }
 
        strTable = "";
        butTable.Enabled = true;
    }
       /*  Функция search, получает: значение k - текущий элемент, масив a[] (взял не взял предмет),
           масcив стоимостей с[],масcив стоимостей m[],
           maxWeight  ограничение веса, currentWeight текущий вес,
           currentCost текущую стоимость   */
      /*  static void search(int k, int[] a, int[] c, int[] m, int maxWeight, int currentWeight, int currentCost)
        {
            if (k >= n)
            {
                if (maxCost < currentCost && maxWeight >= currentWeight)
                {
                    maxCost = currentCost;
                    symstr += Convert.ToString(maxCost) + ' '; // swmstr хранит строку со стоимостями
                    output(a);// вызов функции вывода
 
                }
            }
            else
            {
                // Если по весу проходит, то прибовляем стоимость и сумарный вес вызываем рекурсивно функцию search
                if (currentWeight + m[k] <= maxWeight)      
                {
                    a[k] = 1;
                    search(k + 1, a, c, m, maxWeight, currentWeight + m[k], currentCost + c[k]);
                }
                // Иначе не берем и смотрим следующий элемент
                a[k] = 0;
                search(k + 1, a, c, m, maxWeight, currentWeight, currentCost);
 
            }
 
        }
        // Функция сохряняюшая значения масива a[] в строковую переменную strTable
        static void output(int[] a)
        {
            for (int i = 0; i < n; i++)
            {
              strTable +=Convert.ToString(a[i]);
            }
            strTable += "\n";
            count++;
        }
       private void ОткрытьToolStripMenuItem_Click(object sender, EventArgs e)
       {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            //если в окне диалога был выбран файл
            {
                string s = openFileDialog1.FileName; 
                // в переменную s запоминаем название выбранного файла
                StreamReader sr = new StreamReader(s);
                //создаем новый объект StreamReader и передаем ему переменную
                char f = sr.ReadToEnd()[0]; sr.Close();
                if (f == '?')
                {
                    StreamReader r = new StreamReader(s);
                    count = 0;
                    dataBox.Text = r.ReadToEnd();
                    //Читаем весь файл и записываем его в richTextBox1
                    string t = dataBox.Text.Trim();
                    int ind = t.IndexOf(' ');
                    restrictionmas.Text = t.Substring(1, ind - 1);
                    int tri = ind--;
                    ind++;
                    t = t.Substring(ind, t.Length - tri);
                    dataBox.Text = t.Trim();
                    r.Close();
                    // Закрываем поток
                }
                else MessageBox.Show("Неверный формат данных!");
             
            }
       
       }
       private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
       {
           if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //Создаем новый объект StreamWriter и передаем ему название выбранного файла
                StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);
                //Содержимое richTextBox1 записываем в файл, дабавляе в начале ? и ограничение веса
                sw.WriteLine("?" + restrictionmas.Text + " " + dataBox.Text);         
                sw.Close();      //Закрываем поток
            }
// Перехватов Д. 09МОС(у)
       }
 
       // Вызов формы "О программе"
       private void оПрограммеРюкзакToolStripMenuItem_Click(object sender, EventArgs e)
       {
 
           About form = new About();
           form.Show();
          // Перехватов Д. 09МОС(у)
       }
       private void выходToolStripMenuItem_Click(object sender, EventArgs e)
       {
           Form.ActiveForm.Close();
       }
 
       // Блокирование ввода любых символов кроме цифр
       private void restrictionmas_KeyPress(object sender, KeyPressEventArgs e)
       {
           if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8)
               e.Handled = true;
       }
       // Очистка полей формы
       private void Clear_Click(object sender, EventArgs e)
       {
           dataBox.Clear();
           resultBox.Clear();
           restrictionmas.Clear();
           result.Text="";
           butTable.Enabled = false;
       }
        // Вызов формы альтернативного ввода
       private void Insert_Click(object sender, EventArgs e)
       {
           dataBox.Clear();
           Insert form = new Insert();
           form.Owner = this;
           form.ShowDialog();
           count = 0;
       }
       private void сохранитьРезультатToolStripMenuItem_Click(object sender, EventArgs e)
       {
           if (saveFileDialog1.ShowDialog() == DialogResult.OK)
           {
               StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);
               //Создаем новый объект StreamWriter и передаем ему название выбранного файла
               sw.WriteLine(resultBox.Text);
               //Содержимое richTextBox1 записываем в файл
               sw.Close();      //Закрываем поток
           }
       }
       private void помощьToolStripMenuItem_Click(object sender, EventArgs e)
       {
           Help form = new Help();
           form.Owner = this;
           form.ShowDialog();
       }
       private void открытьРезультатToolStripMenuItem_Click(object sender, EventArgs e)
       {
           //если в окне диалога был выбран файл
           if (openFileDialog1.ShowDialog() == DialogResult.OK)
           {
               // в переменную s запоминаем название выбранного файла
               string s = openFileDialog1.FileName;
               //создаем новый объект StreamReader и передаем ему переменную s
               StreamReader sr = new StreamReader(s);
               //Читаем весь файл и записываем его в richTextBox1
               resultBox.Text = sr.ReadToEnd();
               sr.Close();     // Закрываем поток
           }
       }
 
       private void butExit_Click(object sender, EventArgs e)
       {
            Form1.ActiveForm.Close();
       }
 
       private void butTable_Click(object sender, EventArgs e)
       {
           form.ShowDialog();
       }
Добавлено через 1 час 23 минуты
http://all-blogspot.com/2010/06/c.html код взять с этой страницы
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2016, 22:02
Ответы с готовыми решениями:

Решение задачи с массивом
Дан массив. Переписать его элементы в другой массив такого же размера следующим образа сначала должны идти все отрицательные элементы,...

Решение специфической задачи инициализации
Привет всем. Помогите написать элегантный код. Поясню на примере. Что есть сейчас: private Type1 A_value; private Type2 B_value; ...

Задача про рюкзак
Всем привет! Есть программа, которая решает задачу про рюкзак. Когда у меня количество &quot;предметов&quot; 5 или 10, то все работает...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2016, 22:02
Помогаю со студенческими работами здесь

Задача про рюкзак
Есть несколько видов предметов.Для каждого из них известен вес и стоимость.Необходимо определить ,какие предметы нужно положить в...

Задача про рюкзак
Из заданных N предметов выбрать такие, чтобы суммарный вес был менее 30 кг, а стоимость - наибольшей. Напечатать суммарную стоимость. ...

Решение задачи про множество точек на плоскости
Помогите решить задачу. Даны два множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы круг, ограниченный...

Задача про воришку (рюкзак грабителя)
На с++ написать прогу Дано N предметов, W — вместимость рюкзака, w={w1,w2,…,wN} — соответствующий ему набор положительных целых весов,...

Задача про рюкзак - объяснить алгоритм решения
ребят помогите с реализцией пожалуйста. начинаю осваивать матлаб, и не совсем получается


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru