搜索专题——DFS A1103 Integer Factorization(30)

Posted jasonpeng1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索专题——DFS A1103 Integer Factorization(30)相关的知识,希望对你有一定的参考价值。

技术图片

 

 

#include <bits/stdc++.h>
#include<math.h>
#include <string>
using namespace std;
//maxFacSum 记录最大底数之和
int n,k,p,maxFaceSum = -1;
vector<int> fac,ans,temp;
int power(int x){
    int ans = 1;
    for(int i = 0;i<p;++i){
        ans *= x;
    }
    return ans;
}
void init(){
    int i = 0,temp = 0;
    while(temp <= n){
        fac.push_back(temp);
        temp = power(++i);
    }
}
void DFS(int index,int nowK,int sum,int facSum){
    if(sum == n && nowK == k){
        if(facSum > maxFaceSum){
            ans = temp;
            maxFaceSum = facSum;
        }
        return;
    }
    if(sum > n || nowK > k){//这种情况下不会产生答案,直接返回
        return;
    }
    if(index - 1 >= 0){
        temp.push_back(index);//把底数index加入临时序列temp
        DFS(index,nowK+1,sum+fac[index],facSum+index);//
        temp.pop_back();
        DFS(index - 1,nowK,sum,facSum);//不选
    }
}
int main(){
    scanf("%d%d%d",&n,&k,&p);
    init();
    DFS(fac.size()-1,0,0,0);
    if(maxFaceSum == -1){
        printf("Impossible
");
    }else{
        printf("%d = %d^%d",n,ans[0],p);//输出ans的结果
        for(int i=1;i<ans.size();++i){
            printf(" + %d^%d",ans[i],p);
        }
    }
    system("pause");
    return 0;
} 

以上是关于搜索专题——DFS A1103 Integer Factorization(30)的主要内容,如果未能解决你的问题,请参考以下文章

PAT A1103 Integer Factorization

PAT甲级——A1103 Integer Factorization

DFS专题 | 深度优先搜索

Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)

Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles)

Leetcode之深度优先搜索(DFS)专题-DFS+记忆化 329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)