我无法达到“它能为0吗?”

时间:2016-03-04 19:11:24

标签: algorithm time dynamic-programming

我正在尝试创建一个程序,给出一个数字'n'和一个数字'v'的向量,你必须尝试通过求和,减去或不使用其余来使'n'为零'v'中的数字。

这是我的算法:

bool ALG(const VectorI& v, IteratorV it, int need, int left)
{
    if(it == v.end())  // No more
        return false;
    if (need == *it)  // If I find what I need
        return true;

    if (left < need)   // If it's impossible 
        return false;
    else
    {
        int i = *it;

        if(i == left) // If I'm the last one
        {
            if(abs(need)==abs(left) )   
                return true;
            else
                return false;
        }


        if( i == 0 )
            return (ALG(v, ++it, need, left));

        IteratorV aux = ++it;
        if( ALG(v, aux, need-i, left-i) || // sum it
           ALG(v, aux, need+i, left-i) ||  // subt it
           ALG(v, aux, need, left-i)     // don't use it
           )
            return true;
          else
              return false;
    }

}

但是当投入很大时需要太长时间。任何人都可以帮助我加快速度吗? (或者只是另一种方式)。

编辑: 所以,我称之为:

ALG(V,v.begin(),RANDOM_NUMBER,sum_of(V));

所以,我指向第一个元素。参数'left'是Iterator到end的值之和。每次我决定如何处理迭代器指向的数字(求和,减去或没有),我运行迭代器1位置(因为我看到了这个数字)。 然后,根据我想做的事情,我会以某种方式改变“需要”(如果我想总结数字,'需要+ *它',等等)但是剩下的总是会改变,因为我有对有针对性的数字做出了决定。

向量'v'有100个数字(最大值),所有数字的总和为1000(最大值)。

0 个答案:

没有答案