zoukankan      html  css  js  c++  java
  • 1103 Integer Factorization (30)

    1103 Integer Factorization (30 分)
     

    The KP factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the KP factorization of N for any positive integers N, K and P.

    Input Specification:

    Each input file contains one test case which gives in a line the three positive integers N (400), K (N) and P (1<P7). The numbers in a line are separated by a space.

    Output Specification:

    For each case, if the solution exists, output in the format:

    N = n[1]^P + ... n[K]^P
    

    where n[i] (i = 1, ..., K) is the i-th factor. All the factors must be printed in non-increasing order.

    Note: the solution may not be unique. For example, the 5-2 factorization of 169 has 9 solutions, such as 122​​+42​​+22​​+22​​+12​​, or 112​​+62​​+22​​+22​​+22​​, or more. You must output the one with the maximum sum of the factors. If there is a tie, the largest factor sequence must be chosen -- sequence { a1​​,a2​​,,aK​​ } is said to be larger than { b1​​,b2​​,,bK​​ } if there exists 1LK such that ai​​=bi​​ for i<L and aL​​>bL​​.

    If there is no solution, simple output Impossible.

    Sample Input 1:

    169 5 2
    

    Sample Output 1:

    169 = 6^2 + 6^2 + 6^2 + 6^2 + 5^2
    

    Sample Input 2:

    169 167 3
    

    Sample Output 2:

    Impossible
    


    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn=410;
    
    int factor[maxn];
    
    int n,k,p;
    
    vector<int> ans,temp;
    
    int cnt=0;
    
    bool flag=false;
    
    int maxSum = -1;
    
    void init(){
        int i=0,temp=0;
        while(temp<=n){
            factor[i]=(int)pow(i*1.0,p);
            temp=factor[i];
            cnt=i;
            i++;
        }
    }
    
    
    void DFS(int index,int nowk,int sumW,int sumC){
        if(nowk>k||sumC>n)
                return;
        
        if(nowk==k&&sumC==n){
            
            flag=true;
            
            if(sumW>maxSum){
                maxSum=sumW;
                ans=temp;
            }
        }
        
        
        if(index-1>=0){
            temp.push_back(index);
            DFS(index,nowk+1,sumW+index,sumC+factor[index]);
            temp.pop_back();    
            DFS(index-1,nowk,sumW,sumC);
        
        }
    
        
            
        
        
    }
    
    
    
    int main(){
        
        ios::sync_with_stdio(false);
        cin.tie(0);
        
        
        cin>>n>>k>>p;
        
        init();
        
        DFS(cnt,0,0,0);
        
        
        if(!flag){
            cout<<"Impossible
    ";
            return 0;
        }
        
        
        cout<<n<<" =";
        
        for(int i=0;i<ans.size();i++){
            if(i>0)
                cout<<" +";
            
            cout<<" "<<ans[i]<<"^"<<p;
        }
        
        cout<<endl;
        
        return 0;
        
    }
  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/moranzju/p/11332157.html
Copyright © 2011-2022 走看看