Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 1

Дополните программу, задан N предметы. Из заданных N предметов выбрать такие

10.10.2019, 16:37. Показов 815. Ответов 1
Метки нет (Все метки)

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


Вообщем я написал чтобы из N предметов находилась их суммарный вес чтобы было меньше 30кг но стоимость не учитывается, как можно еще дописать чтобы программа находила наибольшей стоимость?

Задана 2 массива положительных чисел
A[1:N]
B[1:N]

Выбрать такие попарно различные числа i1,i2,ik
Чтобы сумма:
A[I1] + A[I2] + A[I3] + ... + A[Ik] < 30

Сумма B:
B[I1] + B[I2] + B[I3] + ... + B[Ik] = max (была максимальной)
Напечатать только величину max (СУММАРНАЯ СТОИМОСТЬ ВЫБРАННЫХ ПРЕДМЕТОВ)

Предметы более 30 кг - удалить. А остальные расположены в каком либо порядке

Определение дерево вариантов:
На очередном ходу i = 1,2 ... n будем рассматривать
предмет с номером i

Заведем массив P[1:N] и несколько переменных:
i - номер очереднего предмета
s - вес предметов в рюкзаке
z - суммарная стоимость поедметов в рюкзаке
ZM - максимальная стоимость расмотренных вариантов

p[k] = 0 если предмет k <= i взят в рюкзак
p[k] = 1 если не взят в рюкзак

При расмотрении вариантов важно прекращать перебор

При движении ВПЕРЕД мы пытаемся добавить предмет в рюкзак (если S = A[I]<30)
В этом случае мы идем по левой ветки
s = s + A[i]
z = z + B[i]
p[i] = 0;

Код программы:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Рюкзак
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Количество предметов");
            int M = Convert.ToInt32(Console.ReadLine());
            int s = 0; // вес предметов в рюкзаке
            int z = 0; // суммарная стоимость предметов в рюкзаке 
            int zm = 0; // максимальная стоимость расcмотренных вариантов
            int weight;
            int cost;
            int[] Bmax = new int[M];
            int[] A = new int[M]; // вес
            int[] B = new int[M]; // стоимость
            int[] P = new int[M]; // в рюкзаке или нет
            for (int i = 0; i < M; i++)
            {
                Console.Write($"Вес предмета {i} = ");
                weight = Convert.ToInt32(Console.ReadLine());
                A[i] = weight;
                Console.Write($"Стоимость предмета {i} = ");
                cost = Convert.ToInt32(Console.ReadLine());
                B[i] = cost;
            }
            int[] max = new int[M];
            for (int i = 0; i < M; i++)
            {
                zm = zm + B[i];
                if (s + A[i] <= 30)
                {
                    s = s + A[i];
                    z = z + B[i];
                    P[i] = 0;
                    if (zm < z)
                    {
                        zm = z;
                        s = s - A[i];
                        z = z - B[i];
                    }
                }
                else
                {
                    P[i] = 1;
                }
            }
            //for (int i = 0; i < M; i++)
            //{
            //    if (P[i] == 0)
            //        Console.WriteLine($"Предмет{i}. Вес: {A[i]} Cтоимость: {max[i]}");
            //}
            //Console.WriteLine($"Вес {s}");
            Console.WriteLine($"Cуммарная стоимость выбранных предметов: {z}");
            //Console.WriteLine($"максимальная стоимость: {zm}");
            Console.ReadKey();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2019, 16:37
Ответы с готовыми решениями:

Из заданных семи предметов выбрать такие, чтобы их суммарный вес в рюкзаке был менее N кг, а стоимость – наибольшей.
Ввод входных данных: может быть организован как с клавиатуры, так и из текстового файла. Вывод результатов: только на экран монитора. ...

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

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

1
2 / 2 / 1
Регистрация: 24.11.2018
Сообщений: 130
10.10.2019, 16:48
В общем, у меня есть решение задачи про рюкзак. Но мое решение ищет "наилучший" вариант, то есть максимальную выгоду, которую мы можем извлечь. Пошамань с условием для веса, это не сложно, удачи
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace oli
{
    class Program
    {
        struct Items
        {
            public int c;
            public int w;
          
        }
        static void Main(string[] args)
        {
            var str = Console.ReadLine().Split();
            var wMax = int.Parse(str[0]);
            var n = int.Parse(str[1]);
            Items[] arr = new Items[n];
            Items tmp;
 
            for(int i=1;i<=n;i++)
            {
                var rr = Console.ReadLine().Split();
                tmp.w = int.Parse(rr[0]);
                tmp.c = int.Parse(rr[1]);               
                arr[i-1] = tmp;
            }
 
            int cMax=0; double pow = Math.Pow(2, n); int cTmp; int wTmp;
            for (int stack = 0;stack<pow;stack++)
            {
                cTmp = 0; wTmp = 0;
                for (int i = 0; i < n; i++)
                {
                    int mask = 1 << i;     
                    if ((stack & mask) >0)    
                    {
                        wTmp += arr[i].w;
                        cTmp += arr[i].c;    
                    }
                } 
                if(wTmp<=wMax && cTmp>cMax)
                {                    
                    cMax = cTmp;                    
                }
            }
            Console.WriteLine($"{cMax}");
          
           
        }        
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2019, 16:48
Помогаю со студенческими работами здесь

Выбрать предметы, суммарный вес которых меньше 20 кг, а стоимость – максимальна
Задача о рюкзаке. Имеются предметы, веса которых равны w1,w2,…,wn, а цены которых равны c1,c2,…,cn. Выбрать из них предметы, суммарный вес...

Найти такие варианты покупок, чтобы деньги были истрачены полностью, а количество предметов было наибольшим
В нижеследующих задачах определить такие варианты покупок, чтобы деньги были истрачены полностью, а количество предметов было наибольшим:...

Любимые предметы школьников: какие предметы были названы и сколько учеников назвали каждый из них
Помогите пожалуйста написать код. Задание: Каждый из N школьников старших классов назвал свой любимый предмет обучения (N - заданное...

Дополните программу
Написал программу для данного условия.Дан двумерный массив a, размером (nm). Заполнить одномерный массив, найдя среднее арифметическое...

Дополните программу
нужно дополнить мою программу еще несколькими вопросами. Как тут добавить мою программу напишите?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru