İşte başlamanız için bir ipucu. Bir tamsayının bölüm kümesini numaralandırmak için standart dinamik programlama algoritmaları uygulayın ve tüm toplamları tekrarlı olarak kontrol ederek, değişiklik yaparak ve benzersizliği doğrulayarak bunlardan hangisinin benzersiz değişiklik yapmaya izin verdiğini kontrol etmek için biraz mantık ekleyin .
Biraz daha ayrıntılı olarak: Çok ayarlı bir sahip olduğunuzu varsayın . Bir numara Verilen ile , nasıl bir submultiset teşhis edebilir için toplamlar o ? Bu altkümenin benzersiz olup olmadığını nasıl kontrol edebilirsiniz? Değişiklik yapmak için standart dinamik programlama tekniklerini uyarlamaya çalışın . (Ayrıca bu soruya bakın .)i 1 ≤ i ≤ n S iSben1 ≤ i ≤nSben
Bir çoklu küme verildiğinde , ikinci koşulu yerine getirip getirmediğini, yani 1'den kadar olan her sayının bir alt-toplamının (benzersiz değişiklik yapma koşulu) toplamı olarak benzersiz bir şekilde ifade edilip edilemeyeceğini nasıl kontrol edebilirsiniz ? Bir öncekini çözdüyseniz, bu oldukça kolay olmalı.n SSnS
let için koşulların her ikisi de tatmin MULTISETS listesini belirtir. Eğer bilseydim , nasıl inşa için bu bilgileri kullanabilirsiniz ? Burada, bir tamsayının bölümlerini numaralandırmak için standart dinamik programlama tekniklerini uyarlamak isteyebilirsiniz.P ( 1 ) , P ( 2 ) , … , P ( n ) P ( n + 1 )P( n )P(1),P( 2 ),…,P( n )P( n + 1 )
İşte muhtemelen daha iyi olacak bir yaklaşım.
Diyelim ki , her iki koşulunuzu da karşılayan bir multisettir ( ). Bir elemanı daha olan bir çoklu-set elde etmek için bunu nasıl uzatabiliriz ? Başka bir deyişle, her iki koşulunuzu da karşılayan yeni bir çoklu set elde etmek için bir eleman daha eklemenin tüm yollarını nasıl belirleyebiliriz (bazı )?n T S T n ′SnTSTn'
Cevap: eğer elemanları bazılarının bir toplamı olarak ifade edilebilir , daha sonra eklemeden de anlamı yok neden olur: tekliği koşulu ihlal etmek. Yani, hepimiz tamsayılar numaralandırabilmesidir edemez unsurlarının bazılarının bir toplamı olarak ifade edilebilir ; her biri, her iki koşulu da (diğer bazı ) karşılayacak yeni bir çoklu set elde etmek için potansiyel olarak eklenebilecek bir şeydir .S S T x S S T nxSSTxSSTn
Dahası, hangi S tamsayılarının öğelerinin bazılarının toplamı olarak ifade edilebileceğini ve hangilerinin dinamik programlama kullanılarak ifade edilebileceğini saymak mümkündür . Bir iki-boyutlu dizi oluşturmak Boolean, bir tamsayı ifade etmek için bir yol ise geçerlidir bazı bir toplamı olarak ilk elemanları (yalnızca ilk unsurları kullanılacak uygun olan, burada , bu kriteri olan ve ). olduğuna dikkat edinA [ 1 … | S | , 1 … n ] A [ i , j ] j i S i S S S = { s 1 , s 2 , … , s k } s 1 ≤ s 2 ≤ ⋯ ≤ s k A [ i , j ] A [ 1 … Ben -SA [ 1 … |S| ,1…n]A [ i , j ]jbenSbenSSS= {s1,s2, … ,sk}s1≤s2≤ ⋯ ≤skA [ i , j ] değerlerini kullanarak hesaplanabilir : özellikle, eğer veya , aksi. Bu, eklenecek aday olan tüm sayıları belirlememizi sağlar .A [ i , j ] = A [ i - 1 , j ] ∨ A [ i - 1 , j - s i ] j > s i A [ i , j ] = A [ i - 1 , j ] SA [ 1 … i - 1 , 1 … j - 1 ]A [ i , j ] = A [ i - 1,j]∨A[i−1,j−si]j>siA [ i , j ] = A[i−1,j]S
Daha sonra, her bir aday uzantısı ait (bir eleman eklenmesi ile elde edilen ), biz olup olmadığını kontrol etmek isteyen tatmin her iki koşulu. Let unsurlarının toplamı ifade ve elemanlarının toplamı . aralığındaki her tamsayının öğelerinin bazılarının toplamı olarak ifade edilip edilemeyeceğini kontrol etmeliyiz . Bu da dinamik programlama kullanılarak, değişiklik yapmak için standart algoritmalar kullanılarak çözülebilir. (Aslında, hala dizisine sahipsenizS S T n S n ′ T n + 1 , n + 2 , … , n ′ T A A [ 1 … | T | , 1 … n ′ ] A [ | T | , n + 1 ] , A [ | T | , n + 2 ] , … , ATSSTnSn'Tn + 1 , n + 2,…,n'TbirYukarıda bahsedilen, bu sorunu çözmek için kolayca biraz uzatabilirsiniz: dizisi yapıyoruz , tüm ek girişleri doldurmaya devam ediyoruz ve hepsi doğrudur.) Yani, şimdi uzanan tüm çoklu ayarları sayabiliriz tek bir eleman tarafından ve her iki koşulu da karşılar.A [1…|T|,1…n′]T Sbir[|T| ,n+1],A[|T| ,n+2],…,A[|T|,n′]TS
Bu, derhal bağlı tüm için, durumunuzu karşılayan tüm çoklu kümeleri numaralandırmak için bir algoritma önerir . Bu bir dizi olacak , saklar tüm MULTISETS 5 bu toplamı ve genel olarak, saklar tüm MULTISETS grubu bu miktar .n n ≤ 20 P [ 1 … 20 ] P [ 5 ] S P [ n ] S nSnn ≤ 20P[ 1 … 20 ]P[ 5 ]SP[n]Sn
Daha sonra tekrar tekrar doldurabiliriz . i yalnızca bir çoklu kümesi içerecek şekilde ayarlayarak başlayın . Her biri için Daha sonra, her biri için, (1 ila 20 kadar saymaya) olası bütün uzantıları numaralandırmak, ve , izin (yukarıdaki teknikleri kullanılarak) elemanlarının toplamı ifade , ve eğer mevcut değilse ve ise içine yerleştirin .P [ 1 ] { 1 } n S ∈ P [ n ] T S n ′ T T P [ n ′ ] n ′ ≤ 20P[n]P[1]{1}nS∈P[n]TSn′TTP[n′]n′≤20
Bu oldukça yapılabilir. İyi şanslar! İyi eğlenceler! Ayrıntılar üzerinde çalışmak dinamik programlamada iyi bir öğrenme alıştırması olacaktır.