【问题描述】

小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格高的小九宫格(用粗黑色线隔开的)。在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入1 到9 的数字。每个数字在每个小九宫格内不能重复出现,每个数字在每行、每列也不能重复出现。但靶形数独有一点和普通数独不同,即每一个方格都有一个分值,而且如同一个靶子一样,离中心越近则分值越高。

下图具体的分值分布是:最里面一格(黄色区域)为 10 分,黄色区域外面的一圈(红色区域)每个格子为9 分,再外面一圈(蓝色区域)每个格子为8 分,蓝色区域外面一圈(棕色区域)每个格子为7 分,最外面一圈(白色区域)每个格子为6 分,如上图所示。比赛的要求是:每个人必须完成一个给定的数独(每个给定数独可能有不同的填法),而且要争取更高的总分数。而这个总分数即每个方格上的分值和完成这个数独时填在相应格上的数字的乘积的总和。如图,在以下的这个已经填完数字的靶形数独游戏中,总分数为2829。游戏规定,将以总分数的高低决出胜负。

由于求胜心切,小城找到了善于编程的你,让你帮他求出,对于给定的靶形数独,能够得到的最高分数。

【样例输入1】

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

【样例输出1】

2829

【样例输入2】

2852

【解题思路】

本题为NOIP2009提高组第四题,时间给的很充裕,4s的时间深搜绰绰有余(真不知道为什么题解中说要卡评测机……),只需稍作优化即可,然后注意一下数独的规则,注意如何判重。

下面来说说优化。

首先记录下0的个数和位置,然后只需要对每个0的位置从1搜索到9即可,题目中说非0的个数不少于24,这样下来时间复杂度就减少了O((24*9)^n),然后……似乎就没有然后了。

【代码实现】

 type rec=record
x,y:longint;
end;
const fs:array[..,..] of longint=((,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,));
num:array[..,..] of longint=((,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,),
(,,,,,,,,));
var c:array[..,..] of longint;
i,j,ans,n,w,max:longint;
a:array[..] of rec;
f1,f2,f3:array[..,..] of boolean;
procedure dfs(n:longint);
var i,j,k:longint;
begin
if n= then
begin
if ans>max then
max:=ans;
exit;
end;
i:=a[n].x;
j:=a[n].y;
for k:= to do
if (f1[i,k])and(f2[j,k])and(f3[num[i,j],k]) then
begin
f1[i,k]:=false;
f2[j,k]:=false;
f3[num[i,j],k]:=false;
c[i,j]:=k;
ans:=ans+k*fs[i,j];
dfs(n-);
ans:=ans-k*fs[i,j];
f1[i,k]:=true;
f2[j,k]:=true;
f3[num[i,j],k]:=true;
end;
end;
begin
fillchar(f1,sizeof(f1),true);
fillchar(f2,sizeof(f2),true);
fillchar(f3,sizeof(f3),true);
for i:= to do
for j:= to do
begin
read(c[i,j]);
if c[i,j]= then
begin
inc(n);
a[n].x:=i;
a[n].y:=j;
end
else
begin
f1[i,c[i,j]]:=false;
f2[j,c[i,j]]:=false;
f3[num[i,j],c[i,j]]:=false;
ans:=ans+c[i,j]*fs[i,j];
end;
end;
dfs(n);
for i:= to do
for j:= to do
if c[i,j]= then
begin
writeln(-);
halt;
end;
writeln(max);
end.

靶形数独 (codevs 1174)题解的更多相关文章

  1. 靶形数独(codevs 1174)

    1174 靶形数独 2009年NOIP全国联赛提高组  时间限制: 4 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

  2. CODEVS 1174 靶形数独

    题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地 迷上了数独游戏,好胜的他们想用数独来一比高低.但普通 的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z ...

  3. 【CodeVS】p1174 靶形数独

    题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士 ...

  4. P1074 靶形数独题解

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  5. [NOIP2009]靶形数独 题解

    407. [NOIP2009] 靶形数独 时间限制:5 s   内存限制:128 MB [问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低. ...

  6. NOIp 2009:靶形数独

    题目描述 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教, Z ...

  7. Vijos1775 CodeVS1174 NOIP2009 靶形数独

    靶形数独 描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教, Z 博士拿出了他最近发 ...

  8. 【NOIP2009】【CJOJ1687】【洛谷1074】靶形数独

    题面 Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出 ...

  9. [NOIp 2009]靶形数独

    Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他 ...

随机推荐

  1. strtol函数

    今天做啦一个进制转换的题,改来改去最终倒是过啦,本来挺开心的,然后去翻啦一下题解,瞬间就有小情绪啦,哎,人家的代码辣么辣么短,实在是不开心,不过谁让咱是小渣渣呢,在此总结一下strtol 函数. 先来 ...

  2. VC 类泡泡龙游戏算法

    #include <stdio.h> #include <malloc.h> #include <string.h> /* 1 2 1 2 2 1 2 1 2 1 ...

  3. git添加文件过滤

    操作流程 touch .gitignore vi .gitignore,添加需要过滤的文件或目录 git commit 出现问题 假如.gitignore里面添加file,而git库中已经存在file ...

  4. 如何设置修改WPS批注上的用户信息名称

    http://jingyan.baidu.com/article/6b18230953cec7ba59e1596b.html 点击左上角的“WPS文字”:   选择“选项”:   点击“用户信息”: ...

  5. Android开发-API指南- Calendar Provider

    Calendar Provider 英文原文:http://developer.android.com/guide/topics/providers/calendar-provider.html 采集 ...

  6. DB2命令大全

    1.1查看表空间 db2 list tablespaces show detail 1.2查看数据库的表死锁 方法一: 打开监控   db2 update monitor switches using ...

  7. AX在query中添加自己的函数

    在自己新建的Query中,想添加自己提供的函数,我们可以在系统的标准类SysQueryRangeUtil中添加自己写的函数 然后在Query的Range中按照格式(method())进行调用

  8. Android内存泄漏分析

    周末去上海参加了安卓巴士组织的技术论坛,去了才发现自己基础很渣..... 其中提到了android的内存泄漏的问题,回来马上度娘(虽说度娘很渣),整理如下: 一.单例造成的内存泄漏 因为单例的静态特性 ...

  9. 关于hbase的read操作的深入研究 region到storefile过程

    这里面说的read既包括get,也包括scan,实际底层来看这两个操作也是一样的.我们将要讨论的是,当我们从一张表读取数据的时候hbase到底是怎么处理的.分二种情况来看,第一种就是表刚创建,所有pu ...

  10. MITM to crack Https connections

    Everybody knows that https is http over SSL, and https is a secure way for protecting confidential d ...