Byla vydána nová verze 5.18 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 12.5.6. Tor na verzi 0.4.8.6.
Šifrovací nástroj VeraCrypt v menším vydání 1.26.7 nejen opravuje chyby a aktualizuje podporované algoritmy (podrobnosti v poznámkách vydání), ale také přestává podporovat původní svazky TrueCrypt.
V sobotu 7. října proběhne Maker Faire Liberec, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.
Mastodon vydal výroční zprávu za rok 2022 (pdf).
Ubuntu Summit 2023 proběhne od 3. do 5. listopadu v Rize.
Programovací jazyk Python byl vydán v nové major verzi 3.12.0. Podrobný přehled novinek v Changelogu.
Linux ve Scratchi. Ne Linux v linuxové distribuci Linux From Scratch, ale Linux bežící v emulátoru procesoru RISC-V ve vizuálním programovacím jazyce Scratch.
Dnes ve 12 hodin začal další ročník CTF (Capture the Flag) soutěže The Catch: "Tentokrát nás kolegové z Forenzní laboratoře zavedou na loď plnou sofistikovaných síťových technologiích, kde soutěžící budou muset zvládnout náročné úkoly. Loď nese jméno našeho skvělého kolegy Josefa Vericha – síťového guru. Tradičně se soutěž koná v říjnu – měsíci kybernetické bezpečnosti."
Konference LinuxDays 2023 proběhne již tento víkend 7. a 8. října v prostorách Fakulty informačních technologií Českého vysokého učení v Praze (FIT ČVUT). Na programu je spousta zajímavých přednášek a workshopů.
Netflix v pátek 29. září odeslal poslední film na DVD (YouTube). Společnost dnes známá jako streamovací služba začala před 25 lety jako půjčovna filmů na DVD. Zákazník si DVD objednal na webových stránkách, odesláno mu ale bylo klasickou poštou. Po zhlédnutí jej vložil do obálky a poslal zpět.
Zadání: V internetovém obchode je možno zakoupit zboží v různých baleních za různou cenu. např. bal1 (1ks, 20kč/ks) bal2 (5ks, 18kč/ks) bal3 (10ks, 19kč/ks) bal4 (50ks, 17kč/ks)
Zákazník požaduje např 78ks zboží a program by měl optimální počty balení vložit do košíku, aby to pro zázaníka bylo cenově nejvýhodnější.
Takže v tomto případě 1*bal4, 5*bal2, 3*bal1.
Napadá vás jiné řešení než zkoušet všechny možné kombinace a poté vyhodnotit která je nejvýhodnější.
Díky.Řešení dotazu:
78 / 50 = 1 (28)/ 5 = 5 (3) / 10 = 0 (3) / 1 = 3 (0)
bal1 (1ks, 100kč/ks) bal2 (7ks, 10kč/ks) bal3 (20ks 9kč/ks) a zákazník požaduje 21ks
dle tohoto by vyšlo 1*bal3 + 1*bal1 výsledná cena 280kč
správně by mělo být 3*bal2 výsledná cena 210kč
K
je požadovaný počet kusů. Na vstupu jsou dvojice (počet kusů v balení, cena balení).
Inicializace: Udělám pole arr
indexované čísly 1..K
, kde i
-tý prvek pole
je roven nejnižší ceně za balení s i
kusy, pokud takové balení neexistuje, je tam nekonečno.
n
-tý krok algoritmu: Prvky 1..n-1
se už nezmění a obsahují optimální cenu za dané počty kusů. Nyní spočítáme optimální cenu za n
kusů. M
je minimum hodnot arr[i] + arr[n-i]
přes všechna i=1..n-1
. Nejnižší cena za n
kusů je arr[n] <- min(M, arr[n])
.
přes všechna i=1..n-1
stačí přes všechna i=1..(n-1 div 2)
jestli se nepletu
class Variation { var $pieces_arr=array(); var $prices_arr=array(); var $sum_count=0; var $sum_price=0; function Variation() { } function setPieces($type, $count, $price){ $this->pieces_arr[$type] = $count; $this->prices_arr[$type] = $count*$price; $this->sum_count = array_sum($this->pieces_arr); $this->sum_price = array_sum($this->prices_arr); } } class VariationSolver { var $itemsArr = array(); var $reqCount = 0; var $BestVar; function VariationSolver() { $this->BestVar = null; } function setRequestedCount($count){ $this->reqCount = $count; } function addVariationItem($type, $piece, $price){ $this->itemsArr[] = array($type, $piece, $price); } function compute($level, $VarObj){ $max_level = sizeof($this->itemsArr)-1; $increment = $this->itemsArr[$level][1]; for ($i = 0; $i==0 || ($i <= $this->reqCount && ($VarObj->sum_count+$increment)<=$this->reqCount) ; $i=$i+$increment) { $VarObj->setPieces($this->itemsArr[$level][0], $i, $this->itemsArr[$level][2]); if ($max_level>$level){ $this->compute($level+1, $VarObj); } else { if ($VarObj->sum_count==$this->reqCount){ if ($this->BestVar == null || $VarObj->sum_price < $this->BestVar->sum_price){ $this->BestVar = $VarObj; } } } } } function getBestVar(){ //slow $this->BestVar = null; if (sizeof($this->itemsArr)>0){ $this->compute(0, new Variation()); } return $this->BestVar; } } //==== Vypocet ==== $VS = new VariationSolver(); $VS->setRequestedCount(100); $VS->addVariationItem("N",1,100); // typ baleni, pocet kusu v baleni, cena za kus $VS->addVariationItem("B",2,95); // typ baleni, pocet kusu v baleni, cena za kus $VS->addVariationItem("A1",5,90); // typ baleni, pocet kusu v baleni, cena za kus $VS->addVariationItem("D",10,98); // typ baleni, pocet kusu v baleni, cena za kus $VS->addVariationItem("IC1",20,81); // typ baleni, pocet kusu v baleni, cena za kus $VS->addVariationItem("IC2",50,80); // typ baleni, pocet kusu v baleni, cena za kus print_r( $VS->getBestVar() );
Tiskni
Sdílej: