POJ 3278 Catch That Cow

来源:互联网 发布:阿里云数据库rds 设置 编辑:程序博客网 时间:2024/05/14 19:06

从可行性出发容易想到BFS,但是每种状态下有3种情况拓展(i-1,i+1,2*i)

数目有点大,因此需要剪枝

1.每个数最大取到k+1才有意义

2.每个数出现一次即可,因此可以用一下hash技术a[]数组

#include<stdio.h>int n,k;struct note{int num;int s;}que[1000000];int a[1000000];void bfs(void){int head=1,tail=1;que[tail++].num=n;while(head<tail){int temp;temp=que[head].num*2;if(a[temp]==0&&temp<=k+1){a[temp]++;que[tail].num=temp;que[tail].s=que[head].s+1;if(que[tail].num==k)break;tail++;}temp=que[head].num-1;if(a[temp]==0&&temp<=k+1){a[temp]++;que[tail].num=temp;que[tail].s=que[head].s+1;if(que[tail].num==k)break;tail++;}temp=que[head].num+1;if(a[temp]==0&&temp<=k+1){a[temp]++;que[tail].num=temp;que[tail].s=que[head].s+1;if(que[tail].num==k)break;tail++;}head++;}printf("%d\n",que[tail].s);return;}int main(){scanf("%d%d",&n,&k);if(n>=k)printf("%d\n",n-k);elsebfs();return 0;}


0 0
原创粉丝点击