[UVA1374]Power Calculus【迭代加深】

xiaoxiao2025-09-03  254

Pro

QwQ

Sol

挺好打的一个搜索题,不过剪枝可能比较难想。

不断地用deep来当做答案,深搜一遍,看能否求出想要的答案,如果可以就不用deep++,否则一直做下去。

Code

#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n , deep = -1 , flag , stack[1005] , top; void dfs(int dep , int aim , int use , int cnt) { if(use == aim) { flag = 1; return ; } if(top>dep||top<=0||use<<(dep-cnt)<n) return ; for(int i=1; i<=top; i++) { stack[++top] = use+stack[i]; dfs(dep , aim , use+stack[i] , cnt+1); top--; stack[++top] = use-stack[i]; dfs(dep , aim , use-stack[i] , cnt+1); top--; if(flag) return ; } } void sol(int x) { deep = -1; while(1) { flag = 0; deep++; stack[1] = 1; top = 1; dfs(deep , x , 1 , 0); if(flag) { printf("%d\n",deep); break; } } } int main() { while(1) { scanf("%d",&n); if(!n) break; sol(n); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-5035700.html

最新回复(0)