[NOIP2009]靶形数独
小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向Z博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。
靶形数独的方格同普通数独一样,在 99 格宽 \times 9×9 格高的大九宫格中有 99 个 33 格宽 \times 3×3 格高的小九宫格(用粗黑色线隔开的)。在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 11 到 99 的数字。每个数字在每个小九宫格内不能重复出现,每个数字在每行、每列也不能重复出现。但靶形数独有一点和普通数独不同,即每一个方格都有一个分值,而且如同一个靶子一样,离中心越近则分值越高。(如图)
上图具体的分值分布是:最里面一格(黄色区域)为 1010 分,黄色区域外面的一圈(红色区域)每个格子为 99 分,再外面一圈(蓝色区域)每个格子为 88 分,蓝色区域外面一圈(棕色区域)每个格子为 77 分,最外面一圈(白色区域)每个格子为 66 分,如上图所示。比赛的要求是:每个人必须完成一个给定的数独(每个给定数独有可能有不同的填法),而且要争取更高的总分数。而这个总分数即每个方格上的分值和完成这个数独时填在相应格上的数字的乘积的总和。如图,在以下这个已经填完数字的靶形数独游戏中,总分为 28292829 。游戏规定,将以总分数的高低决出胜负。
由于求胜心切,小城找到了善于编程的你,让你帮他求出,对于给定的靶形数独,能够得到的最高分数。
输入格式
一共 99 行,每行 99 个整数(每个数都在 0-90−9 的范围内),表示一个尚未填满的数独方格,未填满的空格用“0”
表示。每两个数字之间用一个空格隔开。
输出格式
输出可以得到的靶形数独的最高分数。如果这个数独无解,则输出整数 -1−1 。
数据范围
40\%40% 的数据,数独中非 00 数的个数不少于 3030。
80\%80% 的数据,数独中非 00 数的个数不少于 2626 。
100\%100% 的数据,数独中非 00 数的个数不少于 2424。
#include<stdio.h>
int score[9][9] = {{6,6,6,6,6,6,6,6,6},{6,7,7,7,7,7,7,7,6},{6,7,8,8,8,8,8,7,6},{6,7,8,9,9,9,8,7,6},{6,7,8,9,10,9,8,7,6},{6,7,8,9,9,9,8,7,6},{6,7,8,8,8,8,8,7,6},{6,7,7,7,7,7,7,7,6},{6,6,6,6,6,6,6,6,6}};int ans=-1,a[10][10];
int f1[10][10],f2[10][10],f3[10][10];void dfs(int step) {int i,j,k,s,xx,yy,zz=10; for(i=1;i<=9;i++) for(j=1;j<=9;j++)if(a[i][j]==0) { for(s=0,k=1;k<=9;k++)if(!f1[i][k]&&!f2[j][k]&&!f3[(i-1)/3*3+(j-1)/3+1][k]) {s++;}if(s<zz) {zz=s,xx=i,yy=j; }}if(zz==10) { for(k=0,i=1;i<=9;i++) for(j=1;j<=9;j++)k+=a[i][j]*score[i-1][j-1]; if(k>ans) ans=k;return;} if(zz==0)return;for(k=1;k<=9;k++)if(!f1[xx][k]&&!f2[yy][k]&&!f3[(xx-1)/3*3+(yy-1)/3+1][k]) {a[xx][yy]=k;f1[xx][k]=f2[yy][k]=f3[(xx-1)/3*3+(yy-1)/3+1][k]=1; dfs(step+1); a[xx][yy]=0;f1[xx][k]=f2[yy][k]=f3[(xx-1)/3*3+(yy-1)/3+1][k]=0; }
}int main() { int i,j,k;for(i=1;i<=9;i++) for(j=1;j<=9;j++) {scanf("%d",&a[i][j]); f1[i][a[i][j]]=1;f2[j][a[i][j]]=1;f3[(i-1)/3*3+(j-1)/3+1][a[i][j]]=1;}dfs(1);printf("%d\n",ans);return 0;
}
[NOIP2009]靶形数独相关推荐
- noip2009 靶形数独
P1074 靶形数独 318通过 1.5K提交 题目提供者洛谷OnlineJudge 标签搜索/枚举2009NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 小城和小华都是热爱 ...
- Vijos1775 CodeVS1174 NOIP2009 靶形数独
靶形数独 描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教, Z 博士拿出了他最近发 ...
- NOIP2009靶形数独
试题描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的& ...
- #10025 「一本通 1.3 练习 4」靶形数独P1074 [NOIP2009 提高组]
[NOIP2009 提高组] 靶形数独 题目背景 此为远古题,不保证存在可以通过任意符合要求的输入数据的程序. 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们 ...
- 【NOIP2009】【DLX】【位运算】T4 靶形数独 题解
小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的"靶形 ...
- [洛谷P1074] 靶形数独
洛谷题目链接:靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博 ...
- 靶形数独(信息学奥赛一本通-T1447)
[题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的& ...
- 靶形数独(洛谷-P1074)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的&q ...
- 【codevs1174】 靶形数独,暴力解决问题
1174 靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 小城和小华都是热爱 ...
最新文章
- AI又被彩虹吹!​网易被预言为“下一个百度”?
- C/C++中的复数介绍
- 皮一皮:爸爸的地位...
- java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent
- 进程间通信 - 匿名管道实现
- vscode python单步调试_调试期间VSCode python“未验证断点”?
- caffe运行不停止_caffe(gpu)安装过程及问题解决
- android开发实例-socket(一)
- GCT之数学公式(平面解析几何)
- python列表元素循环左移_JavaScript系列——数组元素左右移动N位算法实现
- 干货警告!国外有个小姐姐给29篇经典机器学习论文写了总结 | 资源
- 微软SQLHelper.cs类 中文版
- 梨花众创 - 微信支付宝收款二维码合并器
- 如何看oracle 删除完全,怎么查看以前Oracle卸载干净没?
- 用md5值识别相似图片 python
- linux 检查系统丢包,Linux系统网络丢包问题解决
- 程序员 做头发 奇遇记
- BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱
- 流程管理对企业有何价值?如何做好企业流程管理?
- 性能测试指标TPS(Transaction per Second)总结