确实是搜索,但是不用DFS,直接暴力枚举就行。
至于字典序,把x从小到大,y从小到大,遇到合适的z就输出,就能保证是字典序。
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
const int N=1010;
int n,T;
bool work(int n){
for(int x=0;x*3<=n;x++){
for(int y=0;3*x+5*y<=n;y++){
if((n-3*x-5*y)%7==0){
printf("%d %d %d\n",x,y,(n-3*x-5*y)/7);
return 1;
}
}
}
return 0;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
if(!work(n)){
printf("-1\n");
}
}
return 0;
}