Power Calculus(UVA 1374)

网址如下:

Power Calculus - UVA 1374 - Virtual Judge (vjudge.net)

用的迭代加深搜索做的

先上代码:

cpp 复制代码
#include<cstdio>
#include<cmath>

const int maxn = 2001;

bool vis[maxn];
int n, ans, arr[maxn];
int _2[100]{1};

int fetch2_(int cur){
    if(_2[cur]) return _2[cur];
    return _2[cur] = fetch2_(cur - 1) * 2;
}
void dfs(int d, int maxd, int maxm){
    if(arr[d - 1] == n) ans = maxd;
    if(d > maxd || maxm * fetch2_(maxd - d + 1) < n) return;

    //先加法延申
    for(int i = 0; i < d; i++){
        if(ans >= 0) return;
        int nxt = arr[d - 1] + arr[i];
        if(vis[nxt] || (maxm > n && nxt > n)) continue;
        arr[d] = nxt; vis[nxt] = true;
        dfs(d + 1, maxd, (maxm > nxt) ? maxm : nxt);
        vis[nxt] = false;
    }
    //后减法延申
    for(int i = 0; i < d; i++){
        if(ans >= 0) return;
        int nxt = arr[d - 1] - arr[i];
        if(nxt <= 0 || vis[nxt]) continue;
        arr[d] = nxt; vis[nxt] = true;
        dfs(d + 1, maxd, maxm);
        vis[nxt] = false;
    }
}

int main(void)
{
    vis[1] = true; arr[0] = 1;
    while(scanf("%d", &n) == 1 && n){
        ans = -1;
        for(int maxd = 0; ans == -1; maxd++)
            dfs(1, maxd, 1);
        printf("%d\n", ans);
    }

    return 0;
}

简单来说就是每一次"位移"都是选择两个数进行加法或除法来得到新的数,初始的数组只有1,代表的是x^1

列出几个优化方法:

不产生重复的数

只需要有一个数大于n

当最大的数乘2^(maxd - d)所得到的数小于n的时候剪枝

加法不是任选两个数,而是尽可能选更大的数

限制减法的次数

猜想:每次使用新得到的数

相关推荐
可编程芯片开发14 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考15 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
Mr.HeBoYan16 小时前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk
wabs66617 小时前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论
先吃饱再说17 小时前
LeetCode 101. 对称二叉树
算法
是Dream呀18 小时前
人眼看不出的伪造,AI如何识别?实测合合信息跨模态鉴伪与去反光技术
算法
QN1幻化引擎18 小时前
SFA 信号场注意力:用8KB参数换248x KV Cache压缩,边缘设备也能跑长序列
人工智能·算法·gitee·gitlab
段一凡-华北理工大学18 小时前
向量数据库实战:选型、调优与落地~系列文章03:向量相似度算法全解:余弦、欧氏、内积,到底该用哪个?
大数据·数据库·人工智能·算法·机器学习·向量相似度·高炉炼铁
cjr_xyi20 小时前
AT1202Contest_c binarydigit 题解
c语言·c++·算法
atunet20 小时前
从算法优化到系统加速的多层级思考7
算法