Poj 3134 Power Calculus(IDA*)

3134 -- Power Calculus (poj.org)

相当于是问1经过多少次能变成n,val[pos]<<(depth-now)为估计函数,如果最快都不能到n,就return false

复制代码
#include<iostream>
using namespace std;
const int N=1010;
int n,pos,val[N];
bool IDAstar(int now,int depth){
    if(now>depth) return false;
    if(val[pos]<<(depth-now)<n) return false;
    if(val[pos]==n) return true;
    pos++;
    for(int i=0;i<pos;i++){
        val[pos]=val[pos-1]+val[i];
        if(IDAstar(now+1,depth)) return true;
        val[pos]=abs(val[pos-1]-val[i]);
        if(IDAstar(now+1,depth)) return true;
    }
    pos--;
    return false;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    while(cin>>n && n){
        int depth;
        for(depth=0;;depth++){
            pos=0;
            val[pos]=1;
            if(IDAstar(0,depth)) break;
        }    
        cout<<depth<<endl;
    }
    return 0;
}
复制代码
posted @   ACCbulb  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示