usaco 1.5.4 checker
2012-07-18 10:47
309 查看
终于到第一张最后一题了!不过最后一题果然有些难度,虽然是老问题“八皇后”,但是对于从没写过深搜的我来说还是一个挑战。好不容易花了很长时间写正确了深搜,结果也很在意料之中的超时,剪枝的话嫌太麻烦,于是去网上找优化方法,原来有一种叫做位操作的方法可以大大缩短时间,研究了一阵子才搞懂。这里感谢freddy's Blog,在那里借鉴了很多。我还会再改一改代码以更符合我的风格。下面贴出代码,以作纪念。
View Code
View Code
/*{ ID:jzy3209981 PROG:checker LANG:C++ }*/ #include<stdio.h> #include<iostream> #include<string.h> #include<stdlib.h> #include<math.h> using namespace std; int result=0; double deep[14]; void dfs(int a,int n,int rowc,int lc,int rc) { int i; int sign=((1<<n)-1); int row,l,r,p,po; row=rowc; l=lc; r=rc; if(row!=sign) { po=sign&~(row|lc|rc); while(po!=0) { p=po&-po; po-=p; deep[a]=p; dfs(a+1,n,row+p,(l+p)<<1,(r+p)>>1); } } else { if(result<3) for(i=0;i<n;i++) { if(i!=n-1) printf("%.0f ",log(deep[i])/log(2)+1); else printf("%.0f\n",log(deep[i])/log(2)+1); } result++; } } int main() { freopen ("checker.in","r",stdin); freopen ("checker.out","w",stdout); int n,a=0; scanf("%d",&n); dfs(a,n,0,0,0); printf("%d\n",result); return 0; }
相关文章推荐
- [USACO 1.5.4]checker(水题重做——位运算(lowbit的应用))
- USACO 1.5.4 Checker Challenge 题解
- usaco 1.5.4——checker
- usaco1.5.4(checker)
- USACO 1.5.4 checker
- USACO 1.5.4 Checker Challenge ———— DFS
- USACO1.5.4 checker challenge
- USACO 1.5.4 Checker Challenge
- [USACO 1.5.4] Checker Challenge
- usaco 1.5.4 Checker Challenge
- There are 常数s 和 常数s! Usaco 1.5.4 Checker Challenge
- USACO1.5.4 checker challenge
- ACM 64. [USACO 1.5.4] 跳棋的挑战(N皇后迭代实现+打表)
- USACOTrainning.Checker Challenge
- [USACO 6.5.5]Checker Challerge
- USACO section 1.5 Checker Challenge(dfs深搜)
- [usaco]1.5 Checker Challenge
- USACO section 1.5 Checker Challenge(dfs深搜)
- [USACO]checker
- USACO 1.5 Checker Challenge (位操作)