zoukankan      html  css  js  c++  java
  • 1103 integer factorization

    dfs+prune

    AC代码:

    #include <vector>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <numeric>
    using namespace std;
    class sol{
    public:
        vector<int> seq;
        int sum;
    };
    bool operator<(const sol& a,const sol& b){
        if(a.sum != b.sum)
            return a.sum > b.sum;
        else{
            for(int i = 0;i < a.seq.size();i++){
                if(a.seq[i] < b.seq[i])
                    return false;
                else if(a.seq[i] > b.seq[i])
                    return true;
            }
        }
    }
    void rec(vector<int>& pvec,vector<sol>& ret,sol seq,int n,int k,int p,int id){
        if(n < k || k == 0 && n != 0 || n > k * pvec[id])
            return;
        else if(n == 0 && k == 0){
            seq.sum = accumulate(seq.seq.begin(),seq.seq.end(),0);
            ret.push_back(seq);
        }
        else{
            int root(pvec.size() - 1);
            for(int i = id;i >= 1;i--){
                int tmp(pvec[i]);
                if(n >= tmp + k - 1){
                    seq.seq.push_back(i);
                    rec(pvec,ret,seq,n - tmp,k-1,p,i);
                    seq.seq.pop_back();
                }
            }
        }
    }
    int main(){
        int n,k,p;
        scanf("%d %d %d",&n,&k,&p);
        vector<sol> ret;
        sol seq;
        vector<int> pvec;
        int num(0);
        while(true){
            int tmp(pow(float(num),p));
            if(tmp <= n){
                pvec.push_back(tmp);
            }
            else{
                break;
            }
            num++;
        }
        int id(pvec.size() - 1);
        rec(pvec,ret,seq,n,k,p,id);
        if(ret.size() == 0)
            printf("Impossible
    ");
        else{
            sort(ret.begin(),ret.end());
            printf("%d = ",n);
            for(int i = 0;i < k;i++){
                if(i == 0){
                    printf("%d^%d",ret[0].seq[0],p);
                }
                else{
                    printf(" + %d^%d",ret[0].seq[i],p);
                }
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    两道简单的机试题目
    C#二维数组(矩形数组,交错数组)
    用实例展示left Join,right join,inner join,join,cross join,union 的区别
    React 中的 Redux 详解:
    react 组件通信:
    vue 入门, todoList
    Vue 动画
    vue 框架,入门必看
    koa2 的使用方法:(一)
    git 的使用:
  • 原文地址:https://www.cnblogs.com/Aldorado/p/5267581.html
Copyright © 2011-2022 走看看