Partisi vektor membagi vektor ke atas serangkaian vektor sehingga penjumlahannya adalah yang asli. Berikut adalah beberapa partisi:
[3, 1, 2] = [3, 1, 2]
[3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0]
[3, 1, 2] = [1, 1, 2] + [2, 0, 0]
Di sini penambahan vektor dilakukan berdasarkan elemen. Partisi yang valid tidak mengandung vektor dengan bilangan bulat negatif, atau vektor semua-nol.
Sekarang tantangannya adalah untuk menulis program atau fungsi yang menghasilkan semua partisi vektor yang mungkin diberikan vektor target. Ini mungkin terdengar relatif mudah ...
... tapi ada twist. Jika vektor input berukuran L, dan partisi terbesar yang dihasilkannya memiliki elemen M, Anda tidak boleh menggunakan lebih dari memori O (L * M).
Anda dapat mengasumsikan bahwa integer menggunakan memori O (1). Ini berarti bahwa Anda harus menampilkan partisi saat Anda menghasilkannya. Selain itu, Anda hanya harus mengeluarkan setiap partisi tepat sekali. Sebagai contoh, ini adalah partisi yang sama:
[3, 1, 2] = [3, 0, 2] + [0, 1, 0]
[3, 1, 2] = [0, 1, 0] + [3, 0, 2]
Jika Anda ingin menampilkan kedua jawaban Anda tidak valid.
Semua partisi untuk [3, 2]
:
[3, 2]
[0, 1] + [3, 1]
[0, 1] + [0, 1] + [3, 0]
[0, 1] + [0, 1] + [1, 0] + [2, 0]
[0, 1] + [0, 1] + [1, 0] + [1, 0] + [1, 0]
[0, 1] + [1, 0] + [2, 1]
[0, 1] + [1, 0] + [1, 0] + [1, 1]
[0, 1] + [1, 1] + [2, 0]
[0, 2] + [3, 0]
[0, 2] + [1, 0] + [2, 0]
[0, 2] + [1, 0] + [1, 0] + [1, 0]
[1, 0] + [2, 2]
[1, 0] + [1, 0] + [1, 2]
[1, 0] + [1, 1] + [1, 1]
[1, 1] + [2, 1]
[1, 2] + [2, 0]
Untuk menguji jawaban Anda, jalankan di [3, 2, 5, 2]
. Itu harus menghasilkan 17939 partisi, yang semuanya berjumlah [3, 2, 5, 2]
, dan itu semua unik (Anda dapat menguji keunikan dengan terlebih dahulu menyortir setiap partisi secara leksikografis).
Kode terpendek dalam byte menang.