![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго времени суток эксперты)!
Затра сдавать прогу а переделать не успеваю. Помогите пожалуйста. программа на С+ а надо на дельфи. программа о загрузке рюкзака любым методом но лучше матодом динамического программирования. еще прикреплю unit . просто горю. если будит плохая оценка то свободные посещение не дадут (((( помогите плиз. могу даже купить хорошую прогу icq=390431607 типо поиском альтернатив но это не гравное. Сють вопроса: вводится вес рюкзака, количество предметов со стоимостью и весом. надо отобрать самые лучше предметы в заданный рюкзак. ( прикреплю вот фрагмент на C+: |
|
#2
|
|||
|
|||
|
Код:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define MAXWEIGHT 100
int a[MAXWEIGHT];
int last_added[MAXWEIGHT]; // для вычисления добавленного объекта
int i, j;
int aux;
int c[100]; // вес
int v[100]; // цена
int n=0; // количество предметов
int W; // вместимость рюкзака
int Lenght; // количество предметов, длина массива q
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->Memo2->Clear();
Form1->Memo4->Clear();
Form1->Memo3->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ AnsiString buf,s;
AnsiString buffer,st;
AnsiString _buf,_s;
{ // ввод объема рюкзака
st = Edit3->Text;
W = StrToInt(st);
}
{
s = Edit1->Text;
_s = Edit2->Text;
}
if(W<100 && Edit1->Text != "" && Edit2->Text != "")
{
{ // заполняем массив q
int i, k =0;
for(i=1,buf="";i<=s.Length()+1;i++)
{
if(i==s.Length()+1)
{
c[k++] = StrToInt(buf);
n++;
break;
}
if(s[i]==' ')
{
c[k++] = StrToInt(buf);
n++;
buf = "";
}
buf += s[i];
}
}
{ // заполняем массив c
int i, k =0;
for(i=1,_buf="";i<=_s.Length()+1;i++)
{
if(i==_s.Length()+1)
{
v[k++] = StrToInt(_buf);
break;
}
if(_s[i]==' ')
{
v[k++] = StrToInt(_buf);
_buf = "";
}
_buf += _s[i];
}
}
}
else { ShowMessage("Некорректно введены исходные данные!"); }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (i = 0; i <= W; ++i)
{
a[i] = 0;
last_added[i] = -1;
}
a[0] = 0;
for (i = 1; i <= W; ++i) // прямой ход
for (j = 0; j < n; ++j)
if ((c[j] <= i) && (a[i] < a[i - c[j]] + v[j])) {
a[i] = a[i - c[j]] + v[j];
last_added[i] = j;
}
aux = W;
while ((aux > 0) && (last_added[aux] != -1)) // пока рюкзак не пуст и есть элементы выводим их на экран
{
Form1->Memo2->Lines->Add(last_added[aux] + 1); // номера предметов
Form1->Memo3->Lines->Add(v[last_added[aux]]); // стоимости предметов
Form1->Memo4->Lines->Add(c[last_added[aux]]); // веса предметов
aux -= c[last_added[aux]];
}
Form1->Edit4->Text=(aux - c[last_added[aux]]); // оставшееся место
Edit5->Text=(a[W]); // общая стоимость
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form1->Close();
}Последний раз редактировалось Admin, 23.05.2010 в 20:06. |