【问题描述】

小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向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. hdu-Danganronpa(AC自动机)

    Problem Description Danganronpa is a video game franchise created and developed by Spike Chunsoft, t ...

  2. 导出api文档

    Export,选中项目或者需要导出api的类,右键 java-->javadoc configure,选择C:\Program Files\Java\jdk1.6.0_29\bin\javado ...

  3. Goldengate trial队列维护

    查看进程信息: Info replicat_name $Info replicat_name showch 注:   可以查看到详细的关于checkpoint的信息,用于查看GoldenGate进程处 ...

  4. TFS客户端登录用户修改

    1.操作环境: Windows 10 Pro Visual Studio 2013 TFS客户端 2.操作背景 安装完成TFS系统后,使用administrator在客户端进行登陆测试(已勾选保存用户 ...

  5. 谷歌浏览器提示Adobe Flash Player因过期而遭到阻止

    解决方法: 1.下载最新版本chrome://plugins/ 到官网Adobe Flash Player 下载最新版本,目前20 https://get.adobe.com/cn/flashplay ...

  6. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  7. 关于java.lang.IllegalStateException

    今天调试程序时遇到了java.lang.IllegalStateException org.apache.catalina.connector.ResponseFacade.sendRedirect( ...

  8. Nodejs笔记(一)

    Node近些日子大火,看样子js大有统一前端后台的趋势... Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度快,性 ...

  9. android Tab =viewpager+fragmnet

    1.定义几个fragment 的subclass 如fragmentone,fragmenttwo; public class fragmentthree extends Fragment { pri ...

  10. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...