Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
51
Task/Knapsack-problem-0-1/C-sharp/knapsack-problem-0-1-1.cs
Normal file
51
Task/Knapsack-problem-0-1/C-sharp/knapsack-problem-0-1-1.cs
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
using System; // 4790@3.6
|
||||
using System.Threading.Tasks;
|
||||
class Program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
var sw = System.Diagnostics.Stopwatch.StartNew();
|
||||
Console.Write(knapSack(400) + "\n" + sw.Elapsed); // 60 ms
|
||||
Console.Read();
|
||||
}
|
||||
|
||||
static string knapSack(uint w1)
|
||||
{
|
||||
uint sol = 0, v1 = 0;
|
||||
Parallel.For(1, 9, t =>
|
||||
{
|
||||
uint j, wi, k, vi, i1 = 1u << w.Length;
|
||||
for (uint i = (uint)t; i < i1; i += 8)
|
||||
{
|
||||
k = wi = vi = 0;
|
||||
for (j = i; j > 0; j >>= 1, k++)
|
||||
if ((j & 1) > 0)
|
||||
{
|
||||
if ((wi += w[k]) > w1) break;
|
||||
vi += v[k];
|
||||
}
|
||||
if (wi <= w1 && v1 < vi)
|
||||
lock (locker)
|
||||
if (v1 < vi) { v1 = vi; sol = i; }
|
||||
}
|
||||
});
|
||||
string str = "";
|
||||
for (uint k = 0; sol > 0; sol >>= 1, k++)
|
||||
if ((sol & 1) > 0) str += items[k] + "\n";
|
||||
return str;
|
||||
}
|
||||
|
||||
static readonly object locker = new object();
|
||||
|
||||
static byte[] w = { 9, 13, 153, 50, 15, 68, 27, 39, 23, 52, 11,
|
||||
32, 24, 48, 73, 42, 43, 22, 7, 18, 4, 30 },
|
||||
|
||||
v = { 150, 35, 200, 160, 60, 45, 60, 40, 30, 10, 70,
|
||||
30, 15, 10, 40, 70, 75, 80, 20, 12, 50, 10 };
|
||||
|
||||
static string[] items = {"map","compass","water","sandwich","glucose","tin",
|
||||
"banana","apple","cheese","beer","suntan cream",
|
||||
"camera","T-shirt","trousers","umbrella",
|
||||
"waterproof trousers","waterproof overclothes",
|
||||
"note-case","sunglasses","towel","socks","book"};
|
||||
}
|
||||
44
Task/Knapsack-problem-0-1/C-sharp/knapsack-problem-0-1-2.cs
Normal file
44
Task/Knapsack-problem-0-1/C-sharp/knapsack-problem-0-1-2.cs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
using System
|
||||
class program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
knapSack(40);
|
||||
var sw = System.Diagnostics.Stopwatch.StartNew();
|
||||
Console.Write(knapSack(400) + "\n" + sw.Elapsed); // 31 µs
|
||||
Console.Read();
|
||||
}
|
||||
|
||||
static string knapSack(uint w1)
|
||||
{
|
||||
uint n = (uint)w.Length; var K = new uint[n + 1, w1 + 1];
|
||||
for (uint vi, wi, w0, x, i = 0; i < n; i++)
|
||||
for (vi = v[i], wi = w[i], w0 = 1; w0 <= w1; w0++)
|
||||
{
|
||||
x = K[i, w0];
|
||||
if (wi <= w0) x = max(vi + K[i, w0 - wi], x);
|
||||
K[i + 1, w0] = x;
|
||||
}
|
||||
string str = "";
|
||||
for (uint v1 = K[n, w1]; v1 > 0; n--)
|
||||
if (v1 != K[n - 1, w1])
|
||||
{
|
||||
v1 -= v[n - 1]; w1 -= w[n - 1]; str += items[n - 1] + "\n";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
static uint max(uint a, uint b) { return a > b ? a : b; }
|
||||
|
||||
static byte[] w = { 9, 13, 153, 50, 15, 68, 27, 39, 23, 52, 11,
|
||||
32, 24, 48, 73, 42, 43, 22, 7, 18, 4, 30 },
|
||||
|
||||
v = { 150, 35, 200, 160, 60, 45, 60, 40, 30, 10, 70,
|
||||
30, 15, 10, 40, 70, 75, 80, 20, 12, 50, 10 };
|
||||
|
||||
static string[] items = {"map","compass","water","sandwich","glucose","tin",
|
||||
"banana","apple","cheese","beer","suntan cream",
|
||||
"camera","T-shirt","trousers","umbrella",
|
||||
"waterproof trousers","waterproof overclothes",
|
||||
"note-case","sunglasses","towel","socks","book"};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue