Задача о ранце - 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д