题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5323
题意:求包含某个节点的区间树的区间最小范围。
解题思路:搜索+剪枝
#include <iostream>
#include <stdio.h>
using namespace std;
long long ans=0x3f3f3f3f3f3f3f;
void dfs(long long L,long long R,long long RR)
{
if(L<0||R>2*RR)
return;
if(ans&&ans<=R)
return;
if(L==0)
{
ans=min(ans,R);
return;
}
if (2*L<R+1)
return;
dfs(2*L-R-1,R,RR);
dfs(2*L-R-2,R,RR);
dfs(L,2*R-L+1,RR);
dfs(L,2*R-L,RR);
}
int main()
{
long long L,R;
while(~scanf("%I64d %I64d",&L,&R))
{
dfs(L,R,R);
if(ans==0x3f3f3f3f3f3f3f)
{
printf("-1\n");
}
else
{
printf("%I64d\n",ans);
}
ans=0x3f3f3f3f3f3f3f;
}
return 0;
}