洛谷P1074 靶形数独(跳舞链)
坑着,等联赛之后再填(联赛挂了就不填了233)
//minamoto
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
int score[]={,,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,, ,,,,,,,,};
const int N=,mm=N*N*N*N*N*+N,mn=N*N*N+N;
int mp[][];
int ans=-,sz;
int U[mm],D[mm],L[mm],R[mm],C[mm],X[mm];
int S[mn],Q[mn],H[mn];bool v[mn];
void init(int r,int c){
//建好虚拟节点
for(int i=;i<=c;++i){
S[i]=,U[i]=D[i]=i,
L[i+]=i,R[i]=i+;
}
R[sz=c]=,L[]=sz;
while(r) H[r--]=-;//判断每列是否有节点
}
void place(int &r,int &c1,int &c2,int &c3,int &c4,int i,int j,int k){
//看不懂
r=((i-)*N+j-)*N+k;
c1=(i-)*N+j;
c2=N*N+(i-)*N+k;
c3=N*N*+(j-)*N+k;
c4=N*N*+(((i-)/)*+(j-)/)*N+k;
}
void link(int r,int c){
//S记录每列的元素个数,C是个队列,记录总的节点个数(大概)
//好像看不太懂这跳舞链怎么连的……
++S[C[++sz]=c];
X[sz]=r,D[sz]=D[c],U[D[c]]=sz,
U[sz]=c,D[c]=sz;
if(H[r]==-) H[r]=L[sz]=R[sz]=sz;//这行没有的话就都先连起来
else{
R[sz]=R[H[r]],L[R[H[r]]]=sz,
L[sz]=H[r],R[H[r]]=sz;
}
}
void remove(int c){
L[R[c]]=L[c],R[L[c]]=R[c];
for(int i=D[c];i!=c;i=D[i])
for(int j=R[i];j!=i;j=R[j])
D[U[j]]=D[j],U[D[j]]=U[j],--S[C[j]];
}
void resume(int c){
for(int i=U[c];i!=c;i=U[i])
for(int j=L[i];j!=i;j=L[j])
++S[C[D[U[j]]=U[D[j]]=j]];
L[R[c]]=R[L[c]]=c;
}
void dance(int k){
if(!R[]){
int res=;
for(int i=;i<k;++i)
res+=score[(X[Q[i]]-)/N+]*((X[Q[i]]-)%N+);
cmax(ans,res);
return;
}
int tmp=mm,c;
for(int i=R[];i;i=R[i])
if(S[i]<tmp) tmp=S[c=i];
remove(c);
for(int i=D[c];i!=c;i=D[i]){
Q[k]=i;
for(int j=R[i];j!=i;j=R[j]) remove(C[j]);
dance(k+);
for(int j=L[i];j!=i;j=L[j]) resume(C[j]);
}
resume(c);
}
int main(){
// freopen("testdata.in","r",stdin);
int r,c1,c2,c3,c4;
init(mn,N*N*);
for(int i=;i<=N;++i)
for(int j=;j<=N;++j){
mp[i][j]=read();
if(mp[i][j]){
place(r,c1,c2,c3,c4,i,j,mp[i][j]);
link(r,c1),link(r,c2),link(r,c3),link(r,c4);
v[c1]=v[c2]=v[c3]=v[c4]=;
}
}
for(int i=;i<=N;++i)
for(int j=;j<=N;++j)
for(int k=;k<=N;++k){
place(r,c1,c2,c3,c4,i,j,k);
if(v[c1]||v[c2]||v[c3]||v[c4])continue;
link(r,c1),link(r,c2),link(r,c3),link(r,c4);
}
dance();
printf("%d\n",ans);
return ;
}
洛谷P1074 靶形数独(跳舞链)的更多相关文章
- 洛谷——P1074 靶形数独
P1074 靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z ...
- 洛谷P1074 靶形数独 [搜索]
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...
- [洛谷P1074] 靶形数独
洛谷题目链接:靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博 ...
- 洛谷 P1074 靶形数独 Label:search 不会
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- 洛谷 P1074 靶形数独
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- [NOIP2009] 提高组 洛谷P1074 靶形数独
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的 ...
- 洛谷 P1074 靶形数独(剪枝)
//人生中第一道蓝题(3.5h) 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请 ...
- 洛谷—— P1074 靶形数独
https://www.luogu.org/problem/show?pid=1074 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但 ...
- 洛谷P1074 靶形数独【dfs】【剪枝】
题目:https://www.luogu.org/problemnew/show/P1074 题意: 数独的分数如下.一个数独的总分数就是权值乘所填数字之和. 现在给一个未完成的数独,问分数最高的数独 ...
随机推荐
- Django--组件-用户认证Auth(auth_user增加字段)
引入 : from django.db import models from django.contrib.auth.models import AbstractBaseUser 源码 : fro ...
- KafkaSpout 重复消费问题解决
使用https://github.com/nathanmarz/storm-contrib来对接Kafka0.7.2时, 发现kafkaSpout总会进行数据重读, 配置都无问题, 也没报错 进行de ...
- Java企业微信开发_12_异常:java.lang.OutOfMemoryError: Java heap space
一.异常现象 今天客户迁到正式环境,在做企业微信 接收消息服务器配置 时,出现如下异常: java.lang.OutOfMemoryError: Java heap space 二.异常原因 JAV ...
- listen 69
Today Is Unlucky for People Who Have Bad Luck Today If you have Paraskevidekatriaphobia, today is no ...
- 写个sleep玩玩
static void sig_when_weakup(int no){ printf("weakup weakup\n"); longjmp(buf, ); } void wea ...
- python web server gateway interface (wsgi ) notes
前言: 注:如果需要得到支持批Python3.x以及包含了勘误表,附录,和说明的更新版规范,请查看PEP 3333 摘要: 这篇文档详细说明了一套在web服务器与Python web应用程序(web框 ...
- P2463 [SDOI2008]Sandy的卡片[差分+串拼接后缀数组]
P2463 [SDOI2008]Sandy的卡片 套路都差不多,都是差分后二分答案找lcp.只是这题要把多个串拼接起来成为一个大串,中间用某些值域中没有的数字相隔(最好间隔符都不一样想想为什么),排序 ...
- 有趣的Javascript:只需一个JS让万恶的IE5、IE6、IE7、IE8全都支持H5原生Canvas绘图(有演示demo)
该demo支持IE5以上任意内核的浏览器 查看演示demo:支持IE5以上版本的浏览器Canvas绘图demo 补充:chats.js和echarts等图表库也可以使用本方法兼容IE6以上浏览器 1. ...
- python+selenium自动化测试环境搭建
selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点: * 免费,也不用再为破解QTP而大伤脑筋 * 小巧,对于不同的语 ...
- 发个IOCP的C++例子
IOCP的c++例子 IOCP这个东西连续关注了将近3年的时间,这个代码从哪里找到的已经忘了,下面是作者的信息.感谢他提供的代码! /*++ Copyright (c) 2004 模块名: iomod ...