洛谷P1074:https://www.luogu.org/problemnew/show/P1074

思路

这道题一看就是DFS

打一个分数表方便后面算分

我用x y z数组分别表示行 列 宫 是否有放置数字

用cnt结构体中no和zero分别表示每行行号每行的零的数量(下面会讲到为什么)

我们把每行按照零的数量从小到大排序 并保留行号来计算(因为搜索的层数与每行0的个数有关)

我们用一个队列q表示有几个点要枚举

然后我们从零最少的那行开始枚举就ok了

PS:ans一开始要赋值为-1 因为有无解的情况要输出-1(没有判无解的话95分 别问我咋知道的)

代码

#include<iostream>
#include<algorithm>
using namespace std;
const int score[][]=
{{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,},
{,,,,,,,,,}};
int ans=-,k,maxn;
int map[][],q[][];
bool x[][],y[][],z[][];
struct date
{
int no;
int zero;
}cnt[];
bool cmp(date a,date b)
{
return a.zero<b.zero;
}
int g(int ii,int jj)//判断宫
{
if(ii<=)
{
if(jj<=) return ;
else if(jj<=) return ;
else return ;
}
else if(ii<=)
{
if(jj<=) return ;
else if(jj<=) return ;
else return ;
}
else
{
if(jj<=) return ;
else if(jj<=) return ;
else return ;
}
}
void cinn()
{
for(int i=;i<=;i++)
{
cnt[i].no=i;//记录行号
for(int j=;j<=;j++)
{
cin>>map[i][j];
if(map[i][j]!=)
{
maxn+=map[i][j]*score[i][j];//预算本来就有的分数
x[i][map[i][j]]=;
y[j][map[i][j]]=;
z[g(i,j)][map[i][j]]=;//把行列宫记录
}
else
cnt[i].zero++;//计算0的个数
}
}
}
void dfs(int now,int sum)//now为队列中第几个点 sum为总分
{
if(now>k)//如果队列中的每个点都被枚举过了
{
ans=max(sum,ans);//找出最大值
return;
}
for(int i=;i<=;i++)//枚举数字
if(!x[q[now][]][i]&&!y[q[now][]][i]&&!z[q[now][]][i])//如果行列宫均没有用过这个数字
{
x[q[now][]][i]=y[q[now][]][i]=z[q[now][]][i]=;//行列宫记录
map[q[now][]][q[now][]]=i;//记录这个数字
dfs(now+,sum+score[q[now][]][q[now][]]*map[q[now][]][q[now][]]);
x[q[now][]][i]=y[q[now][]][i]=z[q[now][]][i]=;//还原操作
map[q[now][]][q[now][]]=;
}
}
int main()
{
cinn();
sort(+cnt,++cnt,cmp);//排序
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(!map[cnt[i].no][j])
{
q[++k][]=cnt[i].no;
q[k][]=j;
q[k][]=g(cnt[i].no,j);
}
}
dfs(,maxn);
cout<<ans;
}

【题解】洛谷P1074 [NOIP2009TG] 靶形数独(DFS+剪枝)的更多相关文章

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

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

  2. 洛谷1074 靶状数独dfs 排序、记录、搜索

    题目网址:https://www.luogu.com.cn/problem/P1074 大意就是在一个9*9的数独中填数,要求行列宫都是九个互不相同的数字,给定一定的得分机制,要求求解最大得分.思路大 ...

  3. 伪题解 洛谷 P1363 幻想迷宫(DFS)

    毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...

  4. [洛谷P1074] 靶形数独

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

  5. 洛谷P1074 靶形数独【dfs】【剪枝】

    题目:https://www.luogu.org/problemnew/show/P1074 题意: 数独的分数如下.一个数独的总分数就是权值乘所填数字之和. 现在给一个未完成的数独,问分数最高的数独 ...

  6. 洛谷P1074 靶形数独 [搜索]

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

  7. 洛谷——P1074 靶形数独

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

  8. 洛谷 P1074 靶形数独

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

  9. [NOIP2009] 提高组 洛谷P1074 靶形数独

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

随机推荐

  1. 初识http2.0

    初识http2.0 HTTP2.0性能增强的核心:二进制分帧 HTTP 2.0最大的特点: 不会改动HTTP 的语义,HTTP 方法.状态码.URI 及首部字段,等等这些核心概念上一如往常,却能致力于 ...

  2. 八 SocketChannel

    SocketChannel是一个连接到Tcp网络套接字的通道.可以通过以下两种方式创建SocketChannel: 1.打开一个SocketChannel并连接到互联网上的某台服务器. 2.一个新连接 ...

  3. 洛谷P3953 逛公园(dp 拓扑排序)

    题意 题目链接 Sol 去年考NOIP的时候我好像连最短路计数都不会啊qwq.. 首先不难想到一个思路,\(f[i][j]\)表示到第\(i\)个节点,与最短路之差长度为\(j\)的路径的方案数 首先 ...

  4. Ajax与jsonp

    1.ajax的概念 AJAX = Asynchronous Javascript And XML (AJAX  =  异步  javascript  和 xml) AJAX是一种无需重新加载整个网页的 ...

  5. Linux基础之-元字符

    Bash中的特殊字符,键盘上能敲出来的特殊字符都有其特殊意义,强调一点:元字符是被shell解释的. 1. '',取命令的执行结果 [root@MiWiFi-R3-srv ~]# ls4.txt an ...

  6. Unity使Text 文字逐个出现

    Text tex; string s="Unity使Text 文字逐个出现"; //字符出现间隔 waitTime = 0.3f; // float speed=0; //方法一 ...

  7. 面试题Spring Boot

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...

  8. jquery mobile开发中常见的问题(转载)

    1页面缩放显示问题 问题描述: 页面似乎被缩小了,屏幕太宽了. 处理方法: 在head标签内加入: <meta name="viewport" content="w ...

  9. AutoHotkey使用Excel的Com对象可能导致进程残留问题的原因及解决方案

    在AutoHotkey脚本中,对Excel的应用体验很不错,xl := ComObjActive("Excel.Application")就和当前Excel表连接了, 通过xl变量 ...

  10. 大数据平台搭建:Hadoop

    To construct big data distributed platform based on Hadoop is a common method. Hadoop comes fron Goo ...