8.1 1103 Integer Factorization (30 分)(******)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;

vector<int>temp,ans,fac;
int s,n,p,maxn = -1;

int power(int x)
{
    int ans = 1;
    for(int i = 0;i<p;i++)
    {
        ans *= x;
    }
    return ans;
}

void init()
{
    int i = 0;
    int temp = 0;
    while(temp<=s)
    {
        fac.push_back(temp);
        temp = power(++i);
    }

}

void DFS(int index,int nowk,int sum,int facsum)
{
    if(nowk == n && facsum == s)
    {
        if(maxn < sum)
        {
            maxn = sum;
            ans = temp;
        }
        return;
    }
    if(nowk > n || facsum > s) return;

    if(index > 0)
    {
        temp.push_back(index);
        DFS(index,nowk + 1,sum + index,facsum + fac[index]);
        temp.pop_back();
        DFS(index - 1,nowk,sum,facsum);
    }

}
int main()
{

    //  freopen("in.txt","r",stdin);
    scanf("%d%d%d",&s,&n,&p);
    init();

    DFS(fac.size() - 1,0,0,0);
    if(maxn == -1)
        printf("Impossible");
    else
    {
        printf("%d = ",s);
        for(int i = 0;i<ans.size();i++)
        {
            printf("%d^%d",ans[i],p);
            if(i != ans.size() - 1)
                printf(" + ");
        }

    }




    return 0;
}

发布了111 篇原创文章 · 获赞 4 · 访问量 3226

猜你喜欢

转载自blog.csdn.net/qq_15556537/article/details/99674584