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;
        
    }
  • 相关阅读:
    AE二次开发,解决子窗体使用父窗体的AxControl控件
    ArcEngine二次开发中运行出现There is no Spatial Analyst license currently available or enabled.
    Js网站开发学习第一天
    Winform开发1
    MySql安装
    Windows ping加时间戳
    XML特性总结
    linux手册中函数名后小括号中数字的含义
    TCP通信
    swap交换分区概念
  • 原文地址:https://www.cnblogs.com/moranzju/p/11332157.html
Copyright © 2011-2022 走看看