UVA 1374 Power Calculus(IDA*)

来源:互联网 发布:淘宝买家怎么补差价 编辑:程序博客网 时间:2024/06/11 04:12

之前用普通dfs做的,然后只看了书上的翻译,没看题目,然后就坑了,这题之前产生的x^y都是可以用的,我一开始做以为只能平方,加一和减一。

#include<stdio.h>int max(int a,int b) {return (a>b)?a:b;}int n,a[20];int maxdd=13;bool dfs(int d,int maxd){    if(a[d]==n) return true;    if(d==maxd) return false;    int maxl=0;    for(int i=0;i<=d;i++) maxl=max(maxl,a[i]);    if(maxl<<(maxd-d)<n) return false;    for(int i=d;i>=0;i--)    {        a[d+1]=a[d]+a[i];        if(dfs(d+1,maxd)) return true;;        a[d+1]=a[d]-a[i];        if(dfs(d+1,maxd)) return true;    }    return false;}int IDAstar(){    if(n==1) return 0;    a[0]=1;    for(int maxd=1;maxd<maxdd;maxd++){        if(dfs(0,maxd)) return maxd;    }    return maxdd;}int main(){    while(scanf("%d",&n)&&n){        printf("%d\n",IDAstar());    }    return 0;}


0 0
原创粉丝点击