zoukankan      html  css  js  c++  java
  • ID 迭代加深搜索 模板 埃及分数

    #include <bits/stdc++.h>
    using namespace std;
    #define LL long long
    
    int Maxd;
    LL Ans[10], now[10];
    bool flag;
    
    inline void chkmin()
    {
        for(int i = Maxd; i; i--)
            if(now[i] < Ans[i])
            {
                for(int i = 1; i <= Maxd; i++) Ans[i] = now[i];
                return;
            }
            else if(now[i] > Ans[i]) return;
    }
    
    inline void id_dfs(LL a, LL b, int k) //a / b
    {
        LL Gcd = __gcd(a, b);
        a /= Gcd, b /= Gcd;
        if(k == Maxd)
        {
            if(b%a == 0)
            {
                now[k] = b/a;
                chkmin();
                flag = 1;
            }
            return;
        }
        for(LL i = max(now[k-1], b/a) + 1; a*i < b*(Maxd-k+1); i++) //注意上下界
            now[k] = i, id_dfs(a*i-b, b*i, k+1);
    }
    
    int main()
    {
        LL a, b;
        memset(Ans, 0x7f, sizeof Ans);
        scanf("%lld%lld", &a, &b);
        for(Maxd = 1; ; Maxd++)
        {
            id_dfs(a, b, 1);
            if(flag)
            {
                for(int i = 1; i <= Maxd; i++)
                    printf("%lld%c", Ans[i], i == Maxd ? 10 : 32);
                return 0;
            }
        }
    }
    

    注意题目要求,最小的分数最大,即最大的分母最小

  • 相关阅读:
    nioSocket
    Socket
    常见协议和标准
    Object类clone方法
    java中的运算符
    java中方法的定义
    Spring中实现定时调度
    Spring中对资源的读取支持
    HashMap的实现原理
    固定Realm 与配置数据库连接实现登录验证
  • 原文地址:https://www.cnblogs.com/Orz-IE/p/12039486.html
Copyright © 2011-2022 走看看