題目在此
一道位運算優化dfs題目(大神們各種dancing link orz)
然而聽說這題可以直接從右下角開始爆搜(youngtree:強行把一道爆搜題做成位運算 我:excuse me?)
其實和爆搜填數獨的方法差不多,但是可以用位運算(即1和0)表示乙個格仔填了沒有以及先填哪個格仔、填什麼數,大大簡化了運算(畢竟不用迴圈找格仔填)
乙個小技巧:從空餘格仔最少的一行(或列——取決於你是逐行填還是逐列填)開始填
**如下:
#include #include #include #include using namespace std;
const int score[10][10]=,,,
,,,,
,,
};int emp[10],colu[10],rowu[10],coll[10],searchorder[10],map[10][10],latu[4][4];
int ans,i,j,p,sum,poss;
double log2(int a)
int init()
colu[i]|=p;
rowu[j]|=p;
latu[(i-1)/3][(j-1)/3]|=p;
}else
coll[i]++;
}for (i=1;i<=9;i++)
searchorder[i]=i;//搜尋順序:從已填數多的一行開始填
for (i=1;i<=8;i++)
for (j=i+1;j<=9;j++)
if (coll[searchorder[i]]>coll[searchorder[j]])
for(i=1;i<=9;i++)
if (coll[searchorder[i]]) break;
return i;
}void dfs(int k,int sum)
emp[col]-=first; }}
int main()
dfs(poss,sum);
if (!ans)
printf("-1");
else
printf("%d",ans);
return 0;
}
NOIP2009 靶形數獨
爆搜沒什麼好說的。剪枝思路 一開始將每個點可能取的值的數量統計出,排序,從小到大搜 然後貪心可行性 就是剩下的地方都填9,得分10 不過在vj上測85。日。加了卡時,2e7次之內跳出,總算過了。include include include include include include inclu...
NOIP 2009 靶形數獨
題目描述 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有...
noip2009 靶形數獨
靶形數獨 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中...