文字の間に - '' 今、あなただけ0、1、2、3、4、5、6、7、8を含む文字列を与え、9.Youは記号 '+' またはを追加するように求められます。ただ、あなたの文字列「12345」を与えるように、あなたは「+ 4-5 123」という文字列をうまくすることができます。今、あなたの整数Nを与え、あなたはN。あなたと同じ文字列の結果は2つのだけの隣接する文字の間で最大1つの記号を選択することができます作るために見つけることができますどのように多くの方法を教えてください。
InputEachケースは、文字列sと数Nが含まれています。あなたがequation.Sample入力をするために見つけることができるいくつかの方法:あなたは、文字列の長さが12を超えることはありませんし、Nの絶対値が999999999999.OutputThe出力は、各データ・セットの1行が含まれてい超えないことを確認して
123456789 3 21 1
サンプル出力
図18は、ある 1つの。
+は二つの数字の間に追加されている旨の被写体-彼は戻っ、等回数記録することができるように、処理の数かどうか
考えを各ケースを介してDFS
書式#include <iostreamの> の#include < 文字列 > 使用して 名前空間はstdを、 文字列A; typedefの長い 長いLL。 LL N、ANS。 ボイド DFS(int型の列、int型の合計){ 場合(行== a.size()) { 場合(和== n)は ANS ++ 。 返します。 } LL T = 0 。 用(int型 ; iが(a.sizeを<)I ++はI =行) { TT * = 10 + A [I] - ' 0 ' ; DFS(Iは、 + 1、SUM + T); IF(==行0)続行; //場合行== 0和= 0、例えば過減算などのため単語の数が非常にスキップするように、最初の数字の前にマイナスの数に対応する
DFSを(I +は1、SUM-T); } } int型のmain() { 一方(CIN >> A >> N-){ ANS = 0 。 DFS(0、0 ); COUT << ANS << ENDL; } 戻り 0 ; }