zoukankan      html  css  js  c++  java
  • PAT A1103 Integer Factorization

    线性dfs,注意每次深搜完状态的维护~

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    vector<int> v,tmp,path;
    int n,k,p;
    void init () {
        int t=0,cnt=1;
        while (t<=n) {
            v.push_back(t);
            t=pow(cnt,p);
            cnt++;
        }
    }
    int maxFacSum=-1;
    void dfs (int nowindex,int nowsum,int nowK,int facSum) {
        if (nowK>k||nowsum>n) return;
        if (nowK==k) {
            if (nowsum==n) {
                if (facSum>maxFacSum) {
                    path=tmp;
                    maxFacSum=facSum;
                }
            }
            //tmp.pop_back();
            return;
        }
        while (nowindex>=1) {
            tmp.push_back(nowindex);
            dfs (nowindex,nowsum+v[nowindex],nowK+1,facSum+nowindex);
            tmp.pop_back();
            if (nowindex==1) return;
            nowindex--;
        }
    }
    int main () {
        scanf ("%d %d %d",&n,&k,&p);
        init ();
        dfs (v.size()-1,0,0,0);
        if (maxFacSum==-1) {
            printf ("Impossible");
            return 0;
        }
        printf ("%d = ",n);
        for (int i=0;i<path.size();i++) {
            if (i!=0) printf (" + ");
            printf ("%d^%d",path[i],p);
        }
        return 0;
    }
  • 相关阅读:
    Aviator
    Docker是什么
    vulnhub--SickOs1.1
    vulnhub--HackInOS
    本地浏览器远程访问服务器tensorboard(MobaXterm)
    dogecoin
    python多进程
    gpu
    python调用父类(超类)
    linux更改终端显示颜色(用户名颜色等)
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12301509.html
Copyright © 2011-2022 走看看