PTA甲级1103,DFS问题,采用两层vector代替不定长二维数组
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
int powers[25];
int ans=0;
vector<int> methods;
vector<vector<int>> allmethods;
void dfs(int n,int k,int maxnum){
if(n==0 && k==0){
if(find(allmethods.begin(),allmethods.end(),methods)==allmethods.end()){
int temp=0;
for(int j=0;j<methods.size();j++)
temp+=methods[j];
if(ans<=temp){
if(ans<temp) allmethods.clear();
allmethods.push_back(methods);
ans=temp;
}
}
return;
}
if(n<0 || k<0) return;
for(int i=maxnum;i>0;i--){
methods.push_back(i);
dfs(n-powers[i],k-1,i);
methods.pop_back();
}
}
int main(){
int n,k,p,maxnum=1; cin>>n>>k>>p;
while(1){
powers[maxnum]=pow(maxnum,p);
if(powers[maxnum]>=n){
break;
}
maxnum++;
}
dfs(n,k,maxnum);
if(allmethods.empty())
cout<<"Impossible";
else{
cout<<n<<" = ";
for(int i=0;i<allmethods[0].size()-1;i++)
cout<<allmethods[0][i]<<"^"<<p<<" + ";
cout<<allmethods[0][allmethods[0].size()-1]<<"^"<<p;
}
return 0;
}