Day 4+5 迭代加深搜索(吐了,终于做出来了┭┮﹏┭┮)
代码如下(示例):
#include <bits/stdc++.h>
#define int long long
using namespace std;
int A,B;
int Dep_max=1,flag;
int Final[1005],now[1005];
int PD;//用于剪枝
void DFS(int dep,int a,int b,int f_b){//深搜深度(倒着计数),分子,分母,上一个数的分母
if(!dep){//dep到零,也就是已经进行完了,不到1时停,因为那样还要对最后一个数约分判断
if(!a){//结果合法
if(now[1]<Final[1]){
memcpy(Final,now,sizeof(now));
PD=now[1];
}
flag=1;
}
return ;
}
//剪枝
if(f_b>PD){//已经比最优值小,没必要走下去啦
return ; }
for(int i=max(f_b,b/a);i<=dep*b/a;i++){
now[dep]=i;
DFS(dep-1,a*i-b,b*i,i+1);
}
}
signed main(){
cin>>A>>B;
while(Dep_max){
PD=0x7fffff;
Final[1]=0x7ffffff;
DFS(Dep_max,A,B,1);
if(flag) break;//满足深度最小,跳出
Dep_max++;
}
for(int i=Dep_max;i;i--)
cout<<Final[i]<<" ";
return 0;
}