PAT甲级-DFS-1103 Integer Factorization解题思路

1103 Integer Factorization (30 分)

在这里插入图片描述

思路

DFS结合vector

代码

#include<bits/stdc++.h>
using namespace std;

int n,k,p,maxFacSum = -1;

vector<int>fac,ans,temp;

void init(){
    
    
    int i =0,temp = 0;
    while(temp <= n)
    {
    
    
        fac.push_back(temp);
        temp = pow(++i,p);
    }
}

void DFS(int index,int nowK,int sum,int facSum)//nowK记录多少个,sum记录目标值,facSum记录所有选择数字的总和
{
    
    
    if(sum==n && nowK ==k)
        if(facSum>maxFacSum){
    
    
            ans =temp;
            maxFacSum =facSum;
        }
    if(sum>n || nowK>k)return; //递归停止条件

    if(index -1 >=0)
    {
    
    
        temp.push_back(index);//放该数
        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(maxFacSum == -1)cout<<"Impossible"<<endl;
    else{
    
    
        cout<<n<<" =";
        for(int i =0;i<ans.size();i++)
        {
    
    
            if(i==ans.size()-1)printf(" %d^%d\n",ans[i],p);
            else printf(" %d^%d +",ans[i],p);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43999137/article/details/114703246