NOIP2009T4 靶形數獨

2022-05-01 18:51:09 字數 2738 閱讀 8927

描述

小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他

們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,

z 博士拿出了他最近發明的「靶形數獨」,作為這兩個孩子比試的題目。

靶形數獨的方格同普通數獨一樣,在 9 格寬×9 格高的大九宮格中有 9 個 3 格寬×3 格

高的小九宮格(用粗黑色線隔開的)。在這個大九宮格中,有一些數字是已知的,根據這些數字,利用邏輯推理,在其他的空格上填入 1 到 9 的數字。每個數字在每個小九宮格內不能

重複出現,每個數字在每行、每列也不能重複出現。但靶形數獨有一點和普通數獨不同,即

每乙個方格都有乙個分值,而且如同乙個靶子一樣,離中心越近則分值越高。(如圖)

上圖具體的分值分布是:最裡面一格(黃色區域)為 10 分,黃色區域外面的一圈(紅

色區域)每個格仔為 9 分,再外面一圈(藍色區域)每個格仔為 8 分,藍色區域外面一圈(棕

色區域)每個格仔為 7 分,最外面一圈(白色區域)每個格仔為 6 分,如上圖所示。比賽的

要求是:每個人必須完成乙個給定的數獨(每個給定數獨可能有不同的填法),而且要爭取

更高的總分數。而這個總分數即每個方格上的分值和完成這個數獨時填在相應格上的數字

的乘積的總和

總分數即每個方格上的分值和完成這個數獨時填在相應格上的數字

的乘積的總和。如圖,在以下的這個已經填完數字的靶形數獨遊戲中,總分數為 2829。遊戲規定,將以總分數的高低決出勝負。

由於求勝心切,小城找到了善於程式設計的你,讓你幫他求出,對於給定的靶形數獨,能

夠得到的最高分數。

輸入一共 9 行。每行 9 個整數(每個數都在 0―9 的範圍內),表示乙個尚未填滿的數獨方

格,未填的空格用「0」表示。每兩個數字之間用乙個空格隔開。

輸出輸出可以得到的靶形數獨的最高分數。如果這個數獨無解,則輸出整數-1。

樣例輸入[複製]

sudoku1

7 0 0 9 0 0 0 0 1 

1 0 0 0 0 5 9 0 0 

0 0 0 2 0 0 0 8 0 

0 0 5 0 2 0 0 0 3 

0 0 0 0 0 0 6 4 8 

4 1 3 0 0 0 0 0 0 

0 0 7 0 0 2 0 9 0 

2 0 1 0 6 0 8 0 4 

0 8 0 5 0 4 0 1 2

sudoku2

0 0 0 7 0 2 4 5 3 

9 0 0 0 0 8 0 0 0 

7 4 0 0 0 5 0 1 0 

1 9 5 0 8 0 0 0 0 

0 7 0 0 0 0 0 2 5 

0 3 0 5 7 9 1 0 8 

0 0 0 6 0 1 0 0 0 

0 6 0 9 0 0 0 0 1 

0 0 0 0 0 0 0 0 6

樣例輸出[複製]

sudoku1

2829

sudoku2

2852

提示【資料範圍】

40%的資料,數獨中非 0 數的個數不少於 30。

80%的資料,數獨中非 0 數的個數不少於 26。

100%的資料,數獨中非 0 數的個數不少於 24。

這道題說實話就是暴力搜下去

搜尋的框架就是找到乙個位置,求出能填的數字然後直接往下搜

然後乙個我們人在填數獨的時候肯定是要找最好填上的位置來填,這個位置實際上就是選擇最少的

於是我們的思路就是找出選擇最少的格仔然後填進去

為什麼這樣是更優的,因為在源頭上我們就控制了子樹的大小,這樣接下去才可以說是搜尋規模更小

實際上可以不用二進位制優化,我用了時間**!!!

**:

1 #include2 #include3

using

namespace

std;

4int g[10][10],hang[10][10],lie[10][10],gezi[10][10],maxn=0

,now;

5struct

node;

8int chang[9][9];9

intget(int x,int y)

14void dfs(int

s)23

//cout<24}25

//cout<26

//cout<27 maxn=max(maxn,ans);

28return;29

}30int min0=100

,ggg,hhh,lll;

31for(int i=1;i<=9;i++)

38if(times//

進行更新並且記錄標號

39if(times==0)return

;40 min0=times;

41 hhh=i,lll=j,ggg=get

(i,j);42}

43}44}

45for(int i=1;i<=9;i++)57}

58int

main()80}

81}82dfs(now);

83if(maxn==0)puts("-1"

);84

else

85 printf("

%d\n

",maxn);

86return0;

87 }

NOIP2009 靶形數獨

爆搜沒什麼好說的。剪枝思路 一開始將每個點可能取的值的數量統計出,排序,從小到大搜 然後貪心可行性 就是剩下的地方都填9,得分10 不過在vj上測85。日。加了卡時,2e7次之內跳出,總算過了。include include include include include include inclu...

NOIP 2009 靶形數獨

題目描述 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有...

noip2009 靶形數獨

靶形數獨 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中...