题目:洛谷P1074、Vijos P1755、codevs1174。

题目大意:给你一个数独,让你填完这个数独,并要求得分最大,问这个得分是多少(不能填完输出-1)。

每个格子的得分是当前格子所填的数乘格子的分值。

格子的分值如下:

解题思路:暴力搜索。

然而不加优化的搜索是一定会超时的。

我用了这几个优化就过了这道题:

①位运算,用一个九位二进制数来保存每行/列/九宫格中已经用过的数字,则对于一个点,不能用的数字就是它所在行的状态or列的状态or九宫格的状态。

②每次搜索时,找一个能填的数字最少的格子进行搜索。

③register和手动O2(逃

之后只要你不像我一样把求最大值看成最小值,就能AC了。

C++ Code:

#include<cstdio>
using namespace std;
int nin[10][10]={{0},
{0,1,1,1,2,2,2,3,3,3},
{0,1,1,1,2,2,2,3,3,3},
{0,1,1,1,2,2,2,3,3,3},
{0,4,4,4,5,5,5,6,6,6},
{0,4,4,4,5,5,5,6,6,6},
{0,4,4,4,5,5,5,6,6,6},
{0,7,7,7,8,8,8,9,9,9},
{0,7,7,7,8,8,8,9,9,9},
{0,7,7,7,8,8,8,9,9,9}
},sco[10][10]={{0},
{0,6,6,6,6,6,6,6,6,6},
{0,6,7,7,7,7,7,7,7,6},
{0,6,7,8,8,8,8,8,7,6},
{0,6,7,8,9,9,9,8,7,6},
{0,6,7,8,9,10,9,8,7,6},
{0,6,7,8,9,9,9,8,7,6},
{0,6,7,8,8,8,8,8,7,6},
{0,6,7,7,7,7,7,7,7,6},
{0,6,6,6,6,6,6,6,6,6},
};
int sd[10][10],hang[10]={0},lie[10]={0},kuai[10]={0},ans;
__attribute__((optimize("-O2")))void dfs(int s,int p){
if(p==81){
if(ans<s)ans=s;
return;
}
int x,y,mn=0x3f3f3f3f;
for(register int i=1;i<=9;++i){
for(register int j=1;j<=9;++j)
if(!sd[i][j]){
int t=hang[i]|lie[j]|kuai[nin[i][j]],js=0;
for(register int k=0;k<9;++k)
js+=!(t&(1<<k));
if(js<mn)mn=js,x=i,y=j;
if(js==1)break;
}
if(mn==1)break;
}
if(mn==0x3f3f3f3f)return;
int t=hang[x]|lie[y]|kuai[nin[x][y]];
for(register int k=9;k;--k)
if(!(t&(1<<(k-1)))){
int f=1<<(k-1);
hang[x]^=f;
lie[y]^=f;
sd[x][y]=k;
kuai[nin[x][y]]^=f;
dfs(s+sco[x][y]*k,p+1);
hang[x]^=f;
sd[x][y]=0;
lie[y]^=f;
kuai[nin[x][y]]^=f;
}
}
int main(){
ans=-1;
int s=0,p=0;
for(int i=1;i<=9;++i){
for(int j=1;j<=9;++j){
int& now=sd[i][j];
scanf("%d",&now);
if(now)s+=now*sco[i][j],++p,hang[i]|=1<<(now-1),lie[j]|=1<<(now-1),kuai[nin[i][j]]|=1<<(now-1);
}
}
dfs(s,p);
printf("%d\n",ans);
return 0;
}

[NOIP2009提高组]靶形数独的更多相关文章

  1. P1074 [NOIP2009 提高组] 靶形数独

    #include<bits/stdc++.h> using namespace std; const int N=10; int a[N][N],ans[N][N],vis[3][N][N ...

  2. 洛谷 P1073 最优贸易 & [NOIP2009提高组](反向最短路)

    传送门 解题思路 很长的题,实际上在一个有向图(点有点权)中求一个从起点1到终点n的路径,使得这条路径上点权最大的点与点权最小的点的差值最大(要求必须从点权较小的点能够走到点权较大的点). ——最短路 ...

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

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

  4. Noip2009提高组总结

    Noip2009的题目还是有一定难度的,主要是搜索和最短路都是我的弱项,不检查第一遍下来只做了150分,还是这句话,素质和读题的仔细程度决定了分数.仔细想想,我们化学老师说的话没错,或许题目你都会做, ...

  5. noip2009提高组解题报告

    NOIP2009潜伏者 题目描述 R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则: 1. S 国 ...

  6. noip2009提高组题解

    NOIP2009题解 T1:潜伏者 题目大意:给出一段密文和破译后的明文,一个字母对应一个密文字母,要求破译一段密文,如果有矛盾或有未出现密文无法破译输出failed,否则输出明文. 思路:纯模拟题 ...

  7. [NOIP2009] 提高组 洛谷P1073 最优贸易

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  8. [NOIP2009] 提高组 洛谷P1071 潜伏者

    题目描述 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则: 1. S 国军方内部欲发送的原 ...

  9. [NOIP2009] 提高组 洛谷P1072 Hankson 的趣味题

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...

随机推荐

  1. C语言学习小记

    2013年1月31日 今天试着编程为报文去头去尾.   #include #include #define MAX_LENTH 1024 int main() {  char *path = &quo ...

  2. Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。

    最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择 ...

  3. 51nod 1021 石子归并 (动态规划 简单代码)

    题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);     dp[i][j]表示 ...

  4. 基于localStorage的登录注册

    以下代码,如果有地方有错,请直接指出,我会改进的(只改错误,不改逻辑,因为我自己是不会这样写代码的,这个只适合初学者): <!DOCTYPE html> <html> < ...

  5. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  6. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  7. 史上最简单的在 Yii2.0 中将数据导出成 Excel

    在 vendor/yiisoft/yii2/helpers/ 创建一个 Excel.php <?php namespace yii\helpers;   class Excel{         ...

  8. vue 连接后台

    在 index.js 中可以配置后台的地址:代理的方式: 这个文件在 config 中 proxyTable: { // 连接后台 '/api':{ target:"http://new.w ...

  9. 链表(list)--c实现

    做c的开发有1年多了,期间写过c++,感觉基础不够好,补上去,不丢人.o(^▽^)o to better myself. #include <stdio.h> #include <s ...

  10. ETL工具-informatica产品部分功能、接口采购梳理

    在项目中,经常遇到要进行产品采购,虽然一直在使用informatica工具做数据的抽取.清晰转换.加载,但是使用的功能也比较初级.在遇到采购时大致的进行了梳理. 序号 名称 产品功能说明 产品选配说明 ...