Mon problème. Compte tenu de , je veux compter le nombre de multijeux valide S . Un multiset S est valide si
- La somme des éléments de est n , et
- Chaque numéro de à n peut être exprimée de manière unique comme une somme de quelques - uns des éléments de S .
Exemple. Par exemple , si alors { 1 , 1 , 1 , 1 , 1 } , { 1 , 2 , 2 } , { 1 , 1 , 3 } sont valides.
Cependant, n'est pas valide car 2 peut être formé à la fois par { 1 , 1 } et { 2 } (c'est-à-dire que 2 peut être exprimé comme 2 = 1 + 1 et 2 = 2 ) , donc la deuxième condition ne tient pas. De même 3 peut être formé par { 2 , 1 } et { 1 , 1 , 1 } .
} est également invalide car tous les nombres de 1 à 5 peuvent être créés de manière unique, mais la somme des éléments de S n'est pas 5 .
J'ai essayé de trouver un bon algorithme pour ce problème depuis un certain temps, mais je ne peux pas le résoudre. C'est du codechef . J'ai vu certaines des solutions soumises, mais je n'ai toujours pas pu obtenir la logique pour résoudre le problème. REMARQUE: la limite de temps pour la question est de 10 secondes et
Pour un multiset j'utiliserai la notation a i < si i < j , ce qui signifie qu'un i se produit c i fois en multiset S.
Jusqu'à présent, j'ai tiré quelques conclusions
- Le premier élément du multiset trié requis doit être
- Soit soit un ensemble suivant les deux propriétés alors ∀ r < k a r + 1 = a r ou (
- Soit , où a i se produit fois, suit les propriétés requises, puis de la conclusion ci-dessus nous pouvons dire que ∀ i a i | n + 1 et si j > i .
Preuve: a i + 1 = ( a i c i + a i - 1 ) + 1 ⇒ a i | a i + 1
- Considérons maintenant c'est-à-dire tous les les nombres suivants après 1 seront un multiple de d . Soit donc f ( n )être le compte d'un tel multiset possible alors où je suis sommant sur tout nombre possible de1's(=d-1). En d'autres termes,f(n-1)=g(n)=
Enfin mon problème est réduit à ceci - trouver d'une manière efficace afin qu'il ne dépasse pas la limite de temps.