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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 16:17   #11
Viperous
 
Регистрация: 27.03.2011
Сообщений: 3
По умолчанию

Первое что пришло в голову, это сортировка массива по убыванию, и далее, путем сравнения двух групп прибавлять каждый следующий член последовательности к той группе, в которой "вес" меньше.
Viperous вне форума Ответить с цитированием
Старый 01.04.2011, 16:55   #12
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Я бы сделал так:
1. Если бы не знал задачу о рюкзаке, то ознакомился бы с ней.
2. Начиная с N, до N/2, вызывал бы задачу, указанную выше, сохраняя нужные данные (номера предметов, например), каждый раз для (предыдущего ответа-1), и выбрал бы лучший (самый близкий к N/2).
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.04.2011, 18:53   #13
niki123
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 16
По умолчанию

Всем доброго вечера спасибо что откликнулись.
Цитата:
Вы всё правильно поняли. Почему не будет?
Если взять три предмета массами: 1000, 6 и допустим 2 то вполне логично предположить что «чтобы общие веса групп были максимально близки» в 1 ой группе будет 1000 во второй 8.
Цитата:
niki123, задачу эту для чего решаете? (цель какую пытаетесь достигнуть, какой результат получить? )
Вопрос скорее философский )))) обычная лаб. работа.
Цитата:
N какой максимальной величины может быть?
В условии задачи для N не указан диапазон так что скорее всего N->бесконечности.
По поводу условия задачи я так понимаю, что нужно найти такое распределение весов чтобы их разность была минимальной то есть при любом другом распределении разность будет либо равна найденной или больше найденной (если ошибаюсь поправьте).
Цитата:
Первое что пришло в голову, это сортировка массива по убыванию, и далее, путем сравнения двух групп прибавлять каждый следующий член последовательности к той группе, в которой "вес" меньше
Мне кажется это вполне может получиться прибавлять к меньшей группе элементы ДО ТЕХ ПОР пока она меньше другой группы и затем обратно (в отсортированном массиве).
Попробую реализовать.
niki123 вне форума Ответить с цитированием
Старый 04.04.2011, 12:13   #14
niki123
Пользователь
 
Регистрация: 12.03.2011
Сообщений: 16
По умолчанию

Задача в принципе оказалось довольно простой (если конечно я ее правильно решил)
Может быть кому нибудь понадобиться.
Код:
#include "stdafx.h"
#include "iostream"; 
using namespace std; 
int _tmain(int argc, _TCHAR* argv[])
{
	int n, r, k=0, l=0;
	float v1, v2;
	cout<<"VVedite razmer massiva\n";
	cin>>n;
	float *mass=new float [n];
	float *mass1=new float [n];
	float *mass2=new float [n];
	cout<<"VVedite element massiva\n";
	for (int i=0; i<n; i++)
	{
		cin>>mass[i];
		cout<<"\n";
	}

	for (int i=0; i<n-1; i++)
	{
		for (int j=0; j<n-1; j++)
		{
			if (mass[j]<mass[j+1])
			{
				int s=mass[j];
				mass[j]=mass[j+1];
				mass[j+1]=s;
			}
		}
	}
	
	v1=mass[0];
	v2=mass[1];
	
	for (int i=2; i<n; i++)
	{
		if(v1<v2)
		{
			v1+=mass[i];
			mass1[k]=mass[i];
			k++;
		}
		else
		{
			v2+=mass[i];
			mass2[l]=mass[i];
			l++;
		}
	}
	cout<<"Vvodnii massiv";
	for (int i=0; i<n; i++)
	{
		cout<<mass[i]<<"\t";
	}
	cout<<"\n"<<"1 massiv";
	cout<<"\n"<<v1<<"\n";
	cout<<mass[0]<<"\t";
	for (int i=0; i<k; i++)
	{
		cout<<mass1[i]<<"\t";
	}
	cout<<"\n"<<"2 massiv";
	cout<<"\n"<<v2<<"\n";
	cout<<mass[1]<<"\t";
	for (int i=0; i<l; i++)
	{
		cout<<mass2[i]<<"\t";
	}
	cin>>r;
	return 0;
}
niki123 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура данных для хранения предметов L_M Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 15.11.2010 21:08
разделение чисел Михаил2261 Microsoft Office Excel 4 07.09.2010 12:35
Составьте запрос, который позволяет подсчитать в таблице Экзамен количество различных предметов обучения. настенка=) Помощь студентам 3 26.05.2010 03:16
Разделение. Maksim_27_10 Общие вопросы C/C++ 8 21.04.2010 20:40
Задача на С++. формирование выбора предметов Veina Помощь студентам 9 23.12.2009 00:39