题目https://www.luogu.org/problemnew/show/P1074

题意:

数独的分数如下。一个数独的总分数就是权值乘所填数字之和。

现在给一个未完成的数独,问分数最高的数独的总分。

思路:

感觉dfs就是要学会各种剪枝。要敢于剪枝。

最基本的思路就是记下要填的位置和每行每列每个方块填数的情况,然后每个空格都1~9试过来。填完了计算分数。

但是如果仅仅是这样的话还是不行,只有75分TLE。

我们做数独的时候一般都是找零最少的某行某列或某个方格开始填,因为这样的可能性比较少。

这道题也应该考虑到这样的剪枝,不过只需要考虑行就行了,从空格最少的行开始搜索。

 #include<stdio.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue> #define inf 0x7f7f7f7f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int mat[][];
bool visrow[][];
bool viscol[][];
bool vissqu[][]; int ans = -;
vector<pr>zeros;
int n = ; int getscore()
{
int tmp = ;
for(int i = ; i < ; i++){
for(int j = ; j < ; j++){
tmp += mat[i][j] * ;
}
}
for(int k = ; k < ; k++){
for(int i = + k; i < - k; i++){
for(int j = + k; j < - k; j++){
tmp += mat[i][j];
}
}
} return tmp;
} void dfs(int id)
{
if(id == n){
// for(int i = 0; i < 9; i++){
// for(int j = 0; j < 9; j++){
// printf("%d ", mat[i][j]);
// }
// printf("\n");
// }
// printf("%d\n\n", getscore()); ans = max(ans, getscore());
}
int i = zeros[id].first;
int j = zeros[id].second;
for(int k = ; k <= ; k++){
if(!visrow[i][k] && !viscol[j][k] && !vissqu[i / * + j / ][k]){
mat[i][j] = k;
visrow[i][k] = viscol[j][k] = vissqu[i / * + j / ][k] = true;
dfs(id + );
visrow[i][k] = viscol[j][k] = vissqu[i / * + j / ][k] = false;
mat[i][j] = ;
}
}
return;
} vector<int>zero[];
struct node{
int row, cnt;
}rows[]; bool cmp(node a, node b)
{
return a.cnt < b.cnt;
} int main()
{
for(int i = ; i < ; i++){
rows[i].row = i;
for(int j = ; j < ; j++){
scanf("%d", &mat[i][j]);
if(mat[i][j]){
visrow[i][mat[i][j]] = true;
viscol[j][mat[i][j]] = true;
vissqu[i / * + j / ][mat[i][j]] = true;
}
else{
rows[i].cnt++;
zero[i].push_back(j);
n++;
}
}
}
sort(rows, rows + , cmp);
for(int i = ; i < ; i++){
int r = rows[i].row;
for(int j = ; j < rows[i].cnt; j++){
zeros.push_back(make_pair(r, zero[r][j]));
}
} dfs();
printf("%d\n", ans); return ;
}

洛谷P1074 靶形数独【dfs】【剪枝】的更多相关文章

  1. 洛谷——P1074 靶形数独

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

  2. 洛谷 P1074 靶形数独(剪枝)

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

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

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

  4. [洛谷P1074] 靶形数独

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

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

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

  6. 洛谷 P1074 靶形数独

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

  7. 洛谷—— P1074 靶形数独

    https://www.luogu.org/problem/show?pid=1074 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但 ...

  8. 洛谷 P1074 靶形数独 Label:search 不会

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

  9. 洛谷P1074 靶形数独(算竞进阶习题)

    还是数独.. 比上一个多了个分数矩阵,其实没什么差别,但是数据好像水了许多... #include <bits/stdc++.h> #define INF 0x3f3f3f3f using ...

随机推荐

  1. 001_ASP.NET MVC 实用教程 论坛项目 北盟网校 原创视频教程

    下载地址 http://pan.baidu.com/s/1kUJalbp 在线观看地址 http://www.bamn.cn/course/lesson/1 ASP.NET MVC 使用课程,是201 ...

  2. 基于Centos搭建Laravel 环境搭建

    系统要求:CentOS 7.2 64 位操作系统 安装 Laravel Laravel 简介 Laravel 是一套简洁.优雅的 PHP Web 开发框架.它可以让你从面条一样杂乱的代码中解脱出来:它 ...

  3. 【Java】java数据库连接中C3P、DBCP、Druid连接池的使用

    使用JDBC的步骤:1.加载数据库驱动2.通过DriverManager获得数据库连接3.通过Connection获得Statement对象4.使用Statement执行SQL语句.5.操作结果集合6 ...

  4. 在SharePoint 2013 场中移除服务器,提示 cacheHostInfo is null 错误

    Problem 在SharePoint 2013 场中移除服务器,提示 cacheHostInfo is null 错误 Resolution 这是由于SharePoint 2013中分布式缓存实例( ...

  5. goland激活码

    http://idea.youbbs.org      

  6. C# 创建 读取 更新 XML文件

    public static class XmlHelper { /// <summary> /// 读取节点值 /// </summary> /// <param nam ...

  7. 关于使用maven打包如何聚合资源文件

    多数情况下,我们使用maven管理多个子工程,在最后maven打包阶段将多个子工程聚合到一个jar或war包.单个子工程会有自己独立的资源配置文件,在打包的时候我们需要将其聚合在一起(各子工程中的配置 ...

  8. (原)测试 Java中Synchronized锁定对象的用法

    今天再android_serial_port中看到了关键字 synchronized;因为刚好在学java和android,所以就查了一下它的用法: 于是把代码中的一小段代码拿了出来,做了一下修改,测 ...

  9. Ubuntu 设置NAT共享网络(命令行方法)

    本文介绍如何使用iptables来实现NAT转发,事实上就是将一台机器作为网关(gateway)来使用.我们假设充当网关的机器至少有网卡eth0和eth1,使用eth0表示连接到外网的网卡,使用eth ...

  10. SpringBatch的初步了解

    一.SpringBatch是一个批处理的框架,作为一个Spring组件,提供了通过使用Spring的依赖注入来处理批处理的条件. 什么是批处理呢? 在现代企业应用当中,面对复杂的业务以及海量的数据,除 ...