码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-01-19 19:16:02      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:name   oss   bit   back   pac   for   mat   时序   scan   

技术图片

 

 

#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\n");
    }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)

标签:name   oss   bit   back   pac   for   mat   时序   scan   

原文地址:https://www.cnblogs.com/JasonPeng1/p/12215122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!