description:
寫乙個做數獨的程式,但是這個數獨有一點不同的是,每個格仔有乙個權值,權值與在格仔上的數字乘積之和為總分,求最大能有多少分。
格仔的權值規律如下
從白色的框到**,依次為6,7,8,9,10
input:
數獨局面
output:
answer
analysis:
框架上就是dfs搜尋,但是要有乙個貪心的策略是,從有最少空格的行開始,因為,越少的空格在某一行就越能確定答案,可以減少dfs樹的深度。裡面還有一些細節,比如get_point函式的寫法上就有遞推的意思。
#define _crt_secure_no_warnings
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define _for(i,a,b) for(int i=(a);i
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
typedef long long ll;
const int inf = 1 << 30;
const int maxn = 11;
const int mod = 1e9 + 7;
const double eps = 1e-6;
const double pi = acos(-1);
int pic[maxn][maxn],n,tot_id;
int vis[3][10][10],ans;
vector> rows;
vector < pair>id2cor;
inline int get_grid(int r, int c)
inline int get_point(int r, int c)
inline bool ok(int r, int c, int g,int num)
void precal() );
} sort(rows.begin(), rows.end());
ans = -1;
memset(vis, 0, sizeof(vis));
_rep(i,1,n)
_rep(j, 1, n) if(pic[i][j])
tot_id = 0;
id2cor.resize(81);
for(auto it:rows) ;
} }}int cal()
return res;
}void dfs(int depth)
int row = id2cor[depth].first, col = id2cor[depth].second;
int g = get_grid(row, col);
_rep(num, 1, n) }}
int main()
precal();
dfs(0);
cout << ans << endl;
return 0;
}
洛谷 P1074 靶形數獨
p1074 靶形數獨 小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高...
洛谷P1074 靶形數獨
小城和小華都是熱愛數學的好學生,最近,他們不約而同地迷上了數獨遊戲,好勝的他 們想用數獨來一比高低。但普通的數獨對他們來說都過於簡單了,於是他們向 z 博士請教,z 博士拿出了他最近發明的 靶形數獨 作為這兩個孩子比試的題目。靶形數獨的方格同普通數獨一樣,在 9 格寬 9 格高的大九宮格中有 9 個...
洛谷P1074 靶形數獨
這道題單獨以每個位置遞迴純暴力搜尋的話,複雜度9 81,考慮剪枝,和八皇后類似,在同一行同一列同一宮則不能放。另外,想象解答樹,先搜尋情況少的位置和先搜尋情況多的位置總結點數是一樣的,不一樣的地方在於先搜情況少的的話,靠近樹根的分叉少,靠近枝葉稠密,若先搜情況多的,則樹根處稠密,枝葉稀疏。考慮剪枝,...