題目:洛谷p1074、vijos p1755、codevs1174。
題目大意:給你乙個數獨,讓你填完這個數獨,並要求得分最大,問這個得分是多少(不能填完輸出-1)。
每個格仔的得分是當前格仔所填的數乘格仔的分值。
格仔的分值如下:
解題思路:暴力搜尋。
然而不加優化的搜尋是一定會超時的。
我用了這幾個優化就過了這道題:
①位運算,用乙個九位二進位制數來儲存每行/列/九宮格中已經用過的數字,則對於乙個點,不能用的數字就是它所在行的狀態or列的狀態or九宮格的狀態。
②每次搜尋時,找乙個能填的數字最少的格仔進行搜尋。
③register和手動o2(逃
之後只要你不像我一樣把求最大值看成最小值,就能ac了。
c++ code:
#includeusing namespace std;int nin[10][10]=,,,
,,,,
,,},sco[10][10]=,,,
,,,,
,,,};
int sd[10][10],hang[10]=,lie[10]=,kuai[10]=,ans;
__attribute__((optimize("-o2")))void dfs(int s,int p)
int x,y,mn=0x3f3f3f3f;
for(register int i=1;i<=9;++i)
if(mn==1)break;
} if(mn==0x3f3f3f3f)return;
int t=hang[x]|lie[y]|kuai[nin[x][y]];
for(register int k=9;k;--k)
if(!(t&(1<
}int main()
} dfs(s,p);
printf("%d\n",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 格高的大九宮格中...