Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu srpnový souhrn novinek. Kvůli nedostatečnému zájmu byla ukončena výroba telefonů PinePhone Pro.
Po pěti měsících vývoje byla vydána nová verze 0.15.1 programovacího jazyka Zig (GitHub, Wikipedie). Verze 0.15.0 byla přeskočena. Přispělo 162 vývojářů. Přehled novinek v poznámkách k vydání.
Před sedmi lety společnost Valve představila fork projektu Wine s názvem Proton umožňující v Linuxu přímo ze Steamu hrát počítačové hry do té doby běžící pouze ve Windows. Aktuální přehled podporovaných her na stránkách ProtonDB
Společnost DuckDuckGo rozšířila svůj AI chat Duck.ai o GPT-5 mini (𝕏). Duck.ai umožňuje anonymní přístup bez vytváření účtů k několika modelům umělé inteligence. Aktuálně k GPT-4o mini, GPT-5 mini, Llama 4 Scout, Claude Haiku 3.5 a Mistral Small 3.
Marek Tóth v příspěvku DOM-based Extension Clickjacking: Data ve správcích hesel v ohrožení na svém blogu popsal novou clickjacking techniku s několika variantami útoků a otestoval ji proti 11 správcům hesel. Výsledkem bylo nalezení několika 0-day zranitelností, které mohly ovlivnit uložená data desítek milionů uživatelů. Jedno kliknutí kdekoliv na webové stránce kontrolované útočníkem umožňovalo ukrást uživatelská data ze
… více »Na dnešní akci Made by Google 2025 (YouTube) byly představeny telefony Pixel 10 s novým čipem Google Tensor G5 a novými AI funkcemi, hodinky Pixel Watch 4 a sluchátka Pixel Buds 2a.
The Document Foundation oznámila vydání nové major verze 25.8 svobodného kancelářského balíku LibreOffice. Podrobný přehled nových vlastností i s náhledy v poznámkách k vydání (cs) a také na Youtube a PeerTube.
Zeek (Wikipedie), původně Bro, byl vydán v nové major verzi 8.0.0. Jedná se o open source platformu pro analýzu síťového provozu. Vyzkoušet lze online.
Byl vydán Mozilla Firefox 142.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 142 je již k dispozici také na Flathubu a Snapcraftu.
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: