【IDA*+位运算】PKU-1084-Square Destroyer
2012-03-10 01:24
375 查看
估价函数设计为这样:一开始把答案置零,从小正方形开始判断,如果有这个正方形就把答案增加1.,然后删掉这四条边。这样得到的值还是比较准的。
然后加上一个非常重要的判定:只要找到一个正方形,就在当前的dfs中枚举组成这个正方形的几根火柴,而不要管其他的火柴棒。理由很简单——这几根火柴棒总得删掉一根。这样做的目的能够剪掉一大票删法相同但是删除顺序不同的“方案”……
题目
然后加上一个非常重要的判定:只要找到一个正方形,就在当前的dfs中枚举组成这个正方形的几根火柴,而不要管其他的火柴棒。理由很简单——这几根火柴棒总得删掉一根。这样做的目的能够剪掉一大票删法相同但是删除顺序不同的“方案”……
题目
#include<iostream> using namespace std; int n,sqr,maxsqr,maxstep; __int64 square[20]; __int64 set(int x){return (__int64)1<<(x-1);} void getsquare() { int b,i,j,k,l; __int64 p[7][7]; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { square[sqr]=set((2*n+1)*(i-1)+j); square[sqr]+=set((2*n+1)*i+j); square[sqr]+=set((2*n+1)*(i-1)+n+j); square[sqr]+=set((2*n+1)*(i-1)+n+j+1); p[i][j]=square[sqr++]; } for(b=2;b<=n;b++) for(i=1;i+b-1<=n;i++) for(j=1;j+b-1<=n;j++) { square[sqr]=0; for(k=0;k<b;k++) for(l=0;l<b;l++) square[sqr]^=p[i+k][j+l]; sqr++; } } bool dfs(__int64 state,int step) { int i,needstep=0; __int64 ch,nows=state,useful=0; for(i=0;i<sqr;i++) if((nows&square[i])==square[i]) { needstep++; nows^=square[i]; if(useful==0)useful=square[i]; } if(needstep==0)return true; if(needstep+step>maxstep)return false; for(i=1;i<=maxsqr;i++) { ch=set(i); if(ch&useful) if(dfs(state^ch,step+1))return true; } return false; } int main() { //freopen("a.txt","r",stdin); int t,i,k,x; __int64 nows; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); maxsqr=2*n*(n+1); sqr=0; getsquare(); nows=((__int64)1<<maxsqr)-1; for(i=0;i<k;i++) { scanf("%d",&x); nows^=set(x); } for(maxstep=0;!dfs(nows,0);maxstep++); printf("%d\n",maxstep); } return 0; }
相关文章推荐
- POJ 1084 Square Destroyer(IDA*)
- POJ 1084 搜索(IDA*)
- pku2777 线段树 (位运算加速)
- POJ1084_Square Destroyer_IDA*
- [PKU2389]Bull Math (大数运算)
- 位运算——pku2436患病的奶牛
- 1084 四则运算
- 【IDA*(迭代加深)】PKU-2286||HUD-1667-The Rotation Game
- PKU-1077 Eight (八数码之IDA*)
- 算法的威力:法国人用台式机打破由超级计算机创造的圆周率运算世界记录
- 【九度OJ】题目1084:整数拆分
- shell 基本计算、逻辑运算、位运算详解
- 四则运算计算与生成器的开发笔记
- 无符号整形的加减乘除运算
- 递归与动态规划---N皇后问题的递归方法和位运算方法
- 一些位运算技巧(二)
- 大数四则运算
- shell 执行数学运算
- [二进制位运算状态 隐式图搜索]UVa658 - It's not a Bug, it's a Feature!
- 膨胀、腐蚀、开、闭运算——数字图像处理中的形态学