博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1074 靶形数独
阅读量:4599 次
发布时间:2019-06-09

本文共 1779 字,大约阅读时间需要 5 分钟。

题意:给你一个未完成的数独,每个位置上的价值等于数字乘上位置的价值(类似于打靶子)

  https://www.luogu.org/problemnew/show/P1074#sub

 

要点  1.巧妙利用打表便于搜索与判断

    2.贪心思想大量减少搜索的分支:每行(列)选0的个数少的填,减少了分支(不加此剪枝TLE一片。。。。。。)

 

1、刚开始别忘了加上初始的数的value

2、打表注意 0  0 都是 0,(因为打错表找了半天错。。。。QAQ)

 

#include
#include
#include
#include
using namespace std;#define love_nmr 0int ans=-1;bool a[10][10];bool b[10][10];int value;struct node{ int num; int id; friend bool operator < (const node &u,const node &v) { return u.num
cnt) { ans=max(ans,val); return; } for(int i=1;i<=9;i++) { if(!a[s[num].x][i]&&!b[s[num].y][i]&&!c[s[num].gg][i]) { a[s[num].x][i]=true; b[s[num].y][i]=true; c[s[num].gg][i]=true; dfs(num+1,val+i*score[s[num].x][s[num].y]); a[s[num].x][i]=false; b[s[num].y][i]=false; c[s[num].gg][i]=false; } }}int main(){ for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) { scanf("%d",&mp[i][j]); if(mp[i][j]) { a[i][mp[i][j]]=true; b[j][mp[i][j]]=true; c[gong[i][j]][mp[i][j]]=true; value+=mp[i][j]*score[i][j]; } else { tot[i].id=i; tot[i].num++; } } sort(tot+1,tot+10); for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) if(!mp[tot[i].id][j]) { s[++cnt].x=tot[i].id; s[cnt].y=j; s[cnt].gg=gong[tot[i].id][j]; } dfs(1,value); printf("%d",ans); return love_nmr;}

 

转载于:https://www.cnblogs.com/olinr/p/9426766.html

你可能感兴趣的文章
从DataTable到List<Model>(C#.net)
查看>>
JavaScript 垃圾回收机制分析
查看>>
CM+CDH安装教程(CentOS)
查看>>
C/C++中extern和static
查看>>
第一阶段linux结束
查看>>
网络流+二分图模板
查看>>
[MQ]关于ActiveMQ的配置
查看>>
tomcat部署Jenkins并配置jdk、maven、git
查看>>
Lintcode: Digit Counts
查看>>
Leetcode: House Robber
查看>>
adb命令
查看>>
矩阵乘法运算
查看>>
Java 日志组件(三)
查看>>
iphone中button按钮显示为圆形解决
查看>>
SharedPreferences.Editor 的apply()与commit()方法的区别
查看>>
页面编码
查看>>
gulpfile.js(编译sass,压缩图片,自动刷新浏览器)
查看>>
用于解决用户多线路访问的nginx cross isp module
查看>>
vs启动项目提示Web 服务器被配置为不列出此目录的内容。
查看>>
CF140E New Year Garland
查看>>