2021-04-01 PAT A1103 测试点4

测试点4是 1 1 2,一开始没注意,1的幂次方还是1,结果设置边界条件错了,啊啊啊啊,因为一个等号调了我几个小时

#include
#include
#include
#include
using namespace std;
vector fac,temp,ans;
int n, k, p,anssum = 0;
void DFS(int index,int sum){
    if(temp.size() == k&&sum == n){
        int tempsum = accumulate(temp.begin(),temp.end(),0);
        if(tempsum > anssum) {ans = temp;anssum = tempsum;}
        return ;
    }
    if(temp.size() > k || sum > n )return;
    temp.push_back(index);
    DFS(index,sum + fac[index]);
    temp.pop_back();
    if(index > 1)
        DFS(index - 1,sum);
}
int main(){
    scanf("%d %d %d",&n,&k,&p);
    for(int i = 0;i <= n;i++){
        int res = pow(i, p);
        if(res > n) break;
        fac.push_back(res);
    }
    DFS(fac.size() - 1, 0);
    if(ans.size() != 0){
        printf("%d = %d^%d",n,ans[0],p);
        for(int i = 1;i < ans.size();i++) printf(" + %d^%d",ans[i],p);
    }
    else printf("Impossible\n");
}

你可能感兴趣的:(2021-04-01 PAT A1103 测试点4)