UVA

来源:互联网 发布:cocos2d 源码 编辑:程序博客网 时间:2024/06/08 18:25

题目链接:点击打开链接

题意:题目有公式,看公式和数据就可以明白。

思路:刚开始学IDA*算法,并不是太懂,这儿就不介绍算法了,这就算模板题了,


#include <stdio.h>#include <string.h>#include <math.h>int num[100000];int n,m,flag;void dfs(int d){    if(d>m||num[d]<<(m-d)<n) //减枝 ,m为IDA*d的上限,d不能大于m,还有m-d次操作,        return ;             //假若当前值此后m-d次,每次都翻倍,却依旧小于n,则不可能到n,即return ,    if(num[d]==n)    {        flag=1;        return ;    }    int t;    if(flag)        return ;    for(int i=d; i>=0; i--)    {        t=num[d]+num[i];        if(t<2000&&t>0)        {            num[d+1]=t;            dfs(d+1);        }        t=num[d]-num[i];        if(t<2000&&t>0)        {            num[d+1]=t;            dfs(d+1);        }    }    return ;}int main(){    while(~scanf("%d",&n)&&n)    {        num[0]=1;        flag=0;        for(m=0;; m++)        {            dfs(0);            if(flag)                break;        }        printf("%d\n",m);    }    return 0;}


原创粉丝点击