using System; // Knapsack C# binary DANILIN
using System.Text; //
namespace Knapsack
{ class Knapsack
{ static void Main()
{ int n = 7;
int Inside = 5;
int all=Convert.ToInt32(Math.Pow(2,(n+1)));
int[] mass = new int[n];
int[] cost = new int[n];
int[] jack = new int[n];
int[] quality = new int[all];
int[] amount = new int[all];
int i; // circle
int k; // circle
int dec;
string[] bin = new string[all];
int list;
int max;
int max_num;
Random
rand = new Random
();
for (i=0; i<n; i++)
{ mass
[i
]=1+rand.
Next(3); Console.WriteLine("{0} {1} {2}", i+1, mass[i], cost[i]);
}
Console.WriteLine();
for (list = all-1; list>(all-1)/2; list--)
{ dec=list;
while (dec > 0)
{ bin[list] = dec % 2 + bin[list]; // from 10 to 2
dec/=2;
}
if (bin[list] == "") bin[list] = "0";
bin[list]=bin[list].Substring(1,bin[list].Length-1);
for (k=0; k<n; k++) // inside 01
{ jack[k]=Convert.ToInt32(bin[list].Substring(k,1));
quality[list]=quality[list]+mass[k]*jack[k]*cost[k]; // integral of costs
amount[list]=amount[list]+mass[k]*jack[k]; // integral of mass
}
if (amount[list]<= Inside) // current mass < Knapsack
{ Console.WriteLine("{0} {1} {2} {3}", Inside, amount[list], quality[list], bin[list]);
}
}
Console.WriteLine();
max=0;
max_num=1;
for (i=0; i < all; i++)
{ if (amount[i]<=Inside && quality[i]>max)
{ max = quality[i]; max_num =i ;
}
}
Console.WriteLine("{0} {1} {2}",amount[max_num],quality[max_num],bin[max_num]);
}}}
dXNpbmcgU3lzdGVtOwkJLy8gS25hcHNhY2sgQyMgYmluYXJ5IERBTklMSU4KdXNpbmcgU3lzdGVtLlRleHQ7CS8vIApuYW1lc3BhY2UgS25hcHNhY2sgCnsgY2xhc3MgS25hcHNhY2sgIAogICAgeyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7ICAgaW50IG4gPSA3OyAKICAgICAgICAgICAgaW50IEluc2lkZSA9IDU7IAogICAgICAgICAgICBpbnQgYWxsPUNvbnZlcnQuVG9JbnQzMihNYXRoLlBvdygyLChuKzEpKSk7IAogICAgICAgICAgICBpbnRbXSBtYXNzID0gbmV3IGludFtuXTsgCiAgICAgICAgICAgIGludFtdIGNvc3QgPSBuZXcgaW50W25dOyAKICAgICAgICAgICAgaW50W10gamFjayA9IG5ldyBpbnRbbl07IAogICAgICAgICAgICBpbnRbXSBxdWFsaXR5ID0gbmV3IGludFthbGxdOyAKICAgICAgICAgICAgaW50W10gYW1vdW50ID0gbmV3IGludFthbGxdOyAgIAogICAgICAgICAgICBpbnQgaTsgCQkJLy8gY2lyY2xlCiAgICAgICAgICAgIGludCBrOyAJCQkvLyBjaXJjbGUKICAgICAgICAgICAgaW50IGRlYzsgIAogICAgICAgICAgICBzdHJpbmdbXSBiaW4gPSBuZXcgc3RyaW5nW2FsbF07IAogICAgICAgICAgICBpbnQgbGlzdDsgCiAgICAgICAgICAgIGludCBtYXg7CiAgICAgICAgICAgIGludCBtYXhfbnVtOwogICAgICAgICAgICBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKCiAgICAgICAgICAgIGZvciAoaT0wOyBpPG47IGkrKykKICAgICAgICAgICAgeyAgIG1hc3NbaV09MStyYW5kLk5leHQoMyk7CiAgICAgICAgICAgICAgICBjb3N0W2ldPTEwK3JhbmQuTmV4dCg5KTsKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gezF9IHsyfSIsIGkrMSwgbWFzc1tpXSwgY29zdFtpXSk7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwoKIAogICAgICAgICAgICBmb3IgKGxpc3QgPSBhbGwtMTsgbGlzdD4oYWxsLTEpLzI7IGxpc3QtLSkgCiAgICAgICAgICAgIHsgICBkZWM9bGlzdDsgCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVjID4gMCkKICAgICAgICAgICAgICAgIHsgYmluW2xpc3RdID0gZGVjICUgMiArIGJpbltsaXN0XTsgLy8gZnJvbSAxMCB0byAyIAogICAgICAgICAgICAgICAgICAgIGRlYy89MjsgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYmluW2xpc3RdID09ICIiKSAgYmluW2xpc3RdID0gIjAiOwoKICAgICAgICAgICAgICAgIGJpbltsaXN0XT1iaW5bbGlzdF0uU3Vic3RyaW5nKDEsYmluW2xpc3RdLkxlbmd0aC0xKTsgCiAgICAgICAgICAgICAgICBmb3IgKGs9MDsgazxuOyBrKyspIC8vIGluc2lkZSAwMQogICAgICAgICAgICAgICAgeyAgIGphY2tba109Q29udmVydC5Ub0ludDMyKGJpbltsaXN0XS5TdWJzdHJpbmcoaywxKSk7CiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eVtsaXN0XT1xdWFsaXR5W2xpc3RdK21hc3Nba10qamFja1trXSpjb3N0W2tdOyAJLy8gaW50ZWdyYWwgb2YgY29zdHMKICAgICAgICAgICAgICAgICAgICBhbW91bnRbbGlzdF09YW1vdW50W2xpc3RdK21hc3Nba10qamFja1trXTsgCS8vIGludGVncmFsIG9mIG1hc3MKICAgICAgICAgICAgICAgIH0gICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGFtb3VudFtsaXN0XTw9IEluc2lkZSkJCS8vIGN1cnJlbnQgbWFzcyA8IEtuYXBzYWNrCiAgICAgICAgICAgICAgICB7IENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gezF9IHsyfSB7M30iLCBJbnNpZGUsIGFtb3VudFtsaXN0XSwgcXVhbGl0eVtsaXN0XSwgYmluW2xpc3RdKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwoKICAgICAgICAgICAgbWF4PTA7IAogICAgICAgICAgICBtYXhfbnVtPTE7CiAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgYWxsOyBpKyspCiAgICAgICAgICAgIHsgIGlmIChhbW91bnRbaV08PUluc2lkZSAmJiBxdWFsaXR5W2ldPm1heCkKICAgICAgICAgICAgICAgIHsgIG1heCA9IHF1YWxpdHlbaV07IG1heF9udW0gPWkgOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CkNvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gezF9IHsyfSIsYW1vdW50W21heF9udW1dLHF1YWxpdHlbbWF4X251bV0sYmluW21heF9udW1dKTsKfX19Cg==