UVA 1374 Power Calculus

Posted 日拱一卒 功不唐捐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 1374 Power Calculus相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/UVA-1374

 

题意:

输入n,问最少需要几次乘除法可以从x得到x^n

 

每次从当前状态集和找两个数相加减

只需要用刚搜出的数 与之前的数即可

 

#include<cstdio>

using namespace std;

int n,maxd;

int ans[1001]={1};

bool dfs(int d)
{
    int pre=ans[d-1];
    if(d==maxd+1) return pre==n;
    if((pre<<maxd-d+1)<n) return false;
    for(int i=d-1;i>=0;i--)
    {
        ans[d]=pre+ans[i];
        if(ans[d]==n || dfs(d+1)) return true;
        ans[d]=pre-ans[i];
        if(ans[d]>0 && (ans[d]==n || dfs(d+1))) return true;
    }
    return false;
} 

int main()
{
    while(scanf("%d",&n)!=EOF)
    {
         if(!n) return 0;
         if(n==1)  { printf("0\n"); continue; }
         for(maxd=1;;maxd++) 
         {
             if(dfs(1)) break;
         }
         printf("%d\n",maxd);
        // for(int i=0;i<=maxd;i++) printf("%d ",ans[i]);
    }

}

 

以上是关于UVA 1374 Power Calculus的主要内容,如果未能解决你的问题,请参考以下文章

UVA 1374 Power Calculus

UVa1374 Power Calculus(IDA*)

Power Calculus UVA - 1374 迭代加深搜索

UVa1374 Power Calculus (IDA*)

UVa 1374 - Power Calculus——[迭代加深搜索快速幂]

迭代加深搜索(以Power Calculus POJ--3134 UVa--1374为例)