Задача о ранце - C#
Формулировка задачи:
Здравствуйте, помогите,пожалуйста, реализовать алгоритм задачи о рюкзаке. на сайте видел некоторые реализации. хотелось бы переделать данный код с делфи на си #.
а задача о ранце заключается в следующем: имеется N видов предметов различного веса и стоимости. И рюкзак ёмкости М. Нужно определить комбинацию предметов, которые можно вместить в рюкзак,чтобы общая стоимость предметов была максимальной.
Type Item=Record
size,val:integer;
end;
var Items:array[0..N] of item;
function knap(M:integer):integer;
var i,space,max,maxi,t:integer;
begin
for i:=0 to N-1 do
begin
space:=M-items[i].size;
if space >=o then
begin
t:=knap(space)+items[i].val;
if t>max then
begin
max:=t;
maxi:=I;
end;
end;end;
D[M]:=max; D1:=maxi;
end;
Knap:=D[M]
end;
space:=M;
repeat writeln(D1[space]);
space:=space-items[D1[space]].size;
until space<==0;Решение задачи: «Задача о ранце»
textual
Листинг программы
struct Predmet
{
public Int32 Stoimost, Ves;
public String Name;
}
Predmet[] Rukzak1, Rukzak2, All_Item;
Int32 All_ves = 0;
Predmet[] a;
List<Predmet> predmeti = new List<Predmet>();
Int32 predidush = 0;
//Функция которая раскладывает по рюкзакам
void perestanovk_p(int k)
{
int ggg = 0;
if (k < 0)
{
for (int i = 0; i < All_Item.Length / 2; i++)
ggg += All_Item[i].Ves;
}
else
{
for (int i = 0; i <= k; i++)
{
Predmet z = a[i];
a[i] = a[k];
a[k] = z;
perestanovk_p(k - 1);
z = a[i];
a[i] = a[k];
a[k] = z;
}
}
}