iddfs入门题。
//poj 3134 //sep9 #include <iostream> using namespace std; int n,deep; int a[30]; bool iddfs(int pos) { int t; if(pos>deep) return false; if(a[pos]<<(deep-pos)<n) return false; if(a[pos]==n) return true; for(int i=1;i<=pos;++i){ a[pos+1]=a[i]+a[pos]; if(a[pos]+1<=3000&&iddfs(pos+1)==true) return true; a[pos+1]=a[pos]-a[i]; if(a[pos]+1>0&&iddfs(pos+1)==true) return true; } return false; } int main() { while(scanf("%d",&n)==1&&n){ deep=1,a[1]=1; while(iddfs(1)==0) ++deep; printf("%d\n",deep-1); } return 0; }
时间: 2024-12-07 04:41:38