İçeriğe atla
ΣDSA Patterns
Menü
Dil

Knapsack ve Alt Küme DP

Rehber 2 / 6 · Yol 2 / 6

Etkileşimli

Zihinsel model

Bu problem için animasyonlu çözüm. Adımları kaydır veya boşlukla duraklat; değişmezi yüksek sesle yeniden anlat.

Adım 1 / 6
10
0
1

m=1 · n=1

Ones and zeroes: dizeleri m=1 sıfır ve n=1 bir içine paketle. Minik küme ["10","0","1"].

Demo önizleme: Bu çözümler otomatik test paketini geçiyor ama insan tarafından incelenmedi. Trade-off ve yazıları taslak olarak değerlendirin.

Ones and Zeroes

Problem (yeniden ifade)

İkili dizgiler strs; m sıfır ve n bir bütçesi. Bütçeleri aşmadan oluşturulabilecek en büyük dizgi alt kümesi.

Sezgi

Her dizgi maliyeti (sıfır, bir) ve değeri 1 olan bir eşya. Klasik 0/1 knapsack, 2D kapasite.

Yaklaşımlar

2D 0/1 knapsack

Doğrulanmadı
Zaman O(L·m·n)Alan O(m·n)

Fikir. dp[i][j] = ≤i sıfır ve ≤j bir ile max dizgi. Eşyaları kapasiteler üzerinde tersten iterasyonla işle.

Yürüyüş. strs=[“10”,“0001”,“111001”,“1”,“0”], m=5,n=3 → 4.

Trade-off. İleri döngüler aynı dizgiyi yeniden kullanır; ters yön 0/1’i zorlar.

Çözüm
export function findMaxForm(strs: string[], m: number, n: number): number {
  const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
  for (const s of strs) {
    let zeros = 0, ones = 0;
    for (const c of s) if (c === "0") zeros++; else ones++;
    for (let i = m; i >= zeros; i--) {
      for (let j = n; j >= ones; j--) {
        dp[i]![j] = Math.max(dp[i]![j]!, dp[i - zeros]![j - ones]! + 1);
      }
    }
  }
  return dp[m]![n]!;
}
export function findMaxForm(strs: string[], m: number, n: number): number {
  const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
  for (const s of strs) {
    let zeros = 0, ones = 0;
    for (const c of s) if (c === "0") zeros++; else ones++;
    for (let i = m; i >= zeros; i--) {
      for (let j = n; j >= ones; j--) {
        dp[i]![j] = Math.max(dp[i]![j]!, dp[i - zeros]![j - ones]! + 1);
      }
    }
  }
  return dp[m]![n]!;
}

Şablon bağlantısı

Çok boyutlu kapasiteli 0/1 knapsack.

Yansıma