[NOIP2009] 靶形数独 骚气的大爆搜
这两天OD留的题是搜索,这个东西,就是历年的NOIP压轴题嘛。做了几道什么斗地主啊啥的,感觉还是这题我还懂点。
这道题的搜(xia)索(da)思路是这样的:预处理出一切能处理的东西。
数独大家都了解吧:每一行,每一列,每一个九宫格都要求不一样。
我们需要预处理出:
每个点的分数(废话)。每一行中确定的数。每一列中确定的数。每一个九宫格中确定的数。以及最开始确定部分的答案。
记录每个未确定点的坐标。搜他们就好啦(倒着搜一定要。我哪知道为啥)
对于每个点,就纯循环枚举1~9就好了。当然我们要判断剪枝。
当这行有这个数的时候,return
……
以此类推。
这样就算搜到重的也一下就退回来了。
还有,记得要回溯。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<cmath> using namespace std; #define pos(i,a,b) for(int i=(a);i<=(b);i++) #define pos2(i,a,b) for(int i=(a);i>=(b);i--) #define N 200 #define inf 0x7fffffff #define LL long long int a[N][N],point[N][N]; int hang[N][N],lie[N][N],ge[N][N],cnt[N][N]; int ans,basic,ji=0; struct haha{ int x,y; }fei[100]; void init(){ point[5][5]=10; pos(i,1,9) point[1][i]=point[9][i]=point[i][1]=point[i][9]=6; pos(i,2,8) point[2][i]=point[8][i]=point[i][2]=point[i][8]=7; pos(i,3,7) point[3][i]=point[7][i]=point[i][3]=point[i][7]=8; pos(i,4,6) point[4][i]=point[6][i]=point[i][4]=point[i][6]=9; ji=0; pos(i,1,3){ pos(j,1,3){ cnt[i][j]=++ji; } } ji=0; pos(i,1,9){ pos(j,1,9){ scanf("%d",&a[i][j]); if(a[i][j]!=0){ basic+=a[i][j]*point[i][j];//cout<<basic<<endl; hang[i][a[i][j]]=1;lie[j][a[i][j]]=1; int temp=i/3;temp+=i%3==0?0:1;int temp2=j/3;temp2+=j%3==0?0:1; ge[cnt[temp][temp2]][a[i][j]]=1; } else{fei[++ji].x=i;fei[ji].y=j;} } } } void dfs(int last,int sum,int num){ if(hang[fei[last].x][num]==1) return; if(lie[fei[last].y][num]==1) return; int temp=fei[last].x/3;temp+=fei[last].x%3==0?0:1;int temp2=fei[last].y/3;temp2+=fei[last].y%3==0?0:1; if(ge[cnt[temp][temp2]][num]==1) return; if(last==1){ans=max(ans,sum);return;} //cout<<last<<" sum="<<sum<<" num="<<num<<endl; pos(i,1,9){ hang[fei[last].x][num]=1;lie[fei[last].y][num]=1;ge[cnt[temp][temp2]][num]=1; dfs(last-1,sum+(i*point[fei[last-1].x][fei[last-1].y]),i); hang[fei[last].x][num]=0;lie[fei[last].y][num]=0;ge[cnt[temp][temp2]][num]=0; } } int main(){ //freopen("sudoku.in","r",stdin); //freopen("sudoku.out","w",stdout); init(); //cout<<"ji="<<ji<<endl; pos(i,1,9) dfs(ji,i*point[fei[ji].x][fei[ji].y],i); if(ans==0) cout<<"-1"; else cout<<basic+ans; return 0; }
[NOIP2009] 靶形数独 骚气的大爆搜的更多相关文章
- NOIP2009靶形数独[DFS 优化]
描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独 ...
- [NOIP2009]靶形数独 题解
407. [NOIP2009] 靶形数独 时间限制:5 s 内存限制:128 MB [问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低. ...
- [NOIP2015] 斗地主 大爆搜
考试的时候想了半天,实在是想不到解决的办法,感觉只能暴力..然后暴力也懒得打了,小数据模拟骗30分hhh 然而正解真的是暴力..大爆搜.. 然后我的内心拒绝改这道题(TAT) 不过在wcx大佬的帮助下 ...
- [NOIP2009] 靶形数独(搜索+剪枝)
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- NOIP2009 靶形数独
4.靶形数独 (sudoku.pas/c/cpp) [问题描述] 小城和小华都是热爱数学的好学生, 近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了, ...
- NOIP2009靶形数独
题目描述: 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“ ...
- [NOIP2009]靶形数独 深搜+枝杈优化
这道题,又是一位玄学搜索...... 我是用的蜗牛序搜的(顾名思义,@,这么搜),我正着搜80然后一反转比原来快了几十倍........一下AC....... 我的思路是这样的话我们可以从内到外或者从 ...
- [NOIP2009] 靶形数独(搜索)
P1074 靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士 ...
- NOIP2009靶形数独(暴搜)
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z博士请教,Z博士拿出了他最近发明 ...
随机推荐
- linux 小技巧(磁盘空间搜索)
这里记录一些linux 管理中可能会用到的又容易忘的一些小技巧. linux磁盘写入失败,提示磁盘空间不足.一般都会用df -h 或者df -i看是不是磁盘空间不足或者是inode空间不足.发生这种情 ...
- 【LeetCode】91. Decode Ways
题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...
- Linux中使用京东代码库JDCode创建私有Git仓库
国外Git经常被墙,所以目光转向国内.目前,云存储真的是很热,有很多公司在做. 看了一下,CSDN,开源中国,淘宝,京东,Gitcafe都在搞.淘宝只支持SVN. JD号称提供1G免费空间,而且支持私 ...
- Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理
基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...
- readSerializableObj
package JBJADV003;import java.io.*;public class readSerializableObj { public static void main(String ...
- js中表单的聚焦失焦事件
焦点事件: 不是所有元素都有焦点事件,只有可交互性的元素才有,比如表单元素,a标签.页面中只能有一个元素有焦点,一个聚焦,另一个就失焦,默认在document. 例子结构如下: <form> ...
- JavaScript一个简易枚举类型实现扑克牌
<script type="text/javascript"> /** * 这个函数创建一个新的枚举类型,实参对象表示类的每个实例的名字和值 * 返回值是一个构造函数, ...
- input输入框自动填充黄色背景解决方案
chrome表单自动填充后,input文本框的背景会变成偏黄色的,这是由于chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性,然后对其赋予以下样式: ...
- Java Listener pattern 监听者模式
Java Listener pattern 监听者模式 2016-5-12 监听者模式(观察者模式)能降低对象之间耦合程度.为两个相互依赖调用的类进行解耦. 便于进行模块化开发工作.不同模块的开发者可 ...
- sql操作一般函数
sql操作一般函数 函数一般语法:SELECT function(列) FROM 表 函数的基本类型是: Aggregate 合计函数:函数的操作面向一系列的值,并返回一个单一的值. Scalar 函 ...