Luogu P1549 棋盘问题(2)
题意
在N×N的棋盘上(1≤N≤10),填入1,2,…,N^2,共N^2个数,使得任意两个相邻的数之和为素数。
思路
先线性筛(非标准版),然后用a数组记录以i为下标的数是不是质数(就是标记数组),然后就可以搜了,加个vis数组记录此数有没有被搜过。
用f数组记录当前答案(因为第一个搜到的不一定是最优的),用sum记录第一行与第一列的和,如果大于MINN就退出。
然后你就会发现过不了。
接下来就是玄学剪枝了,加个TIM记录答案更新时间,如果长时间未更新就直接退出,然后之后不用输出,但如果可以搜出就等dfs完再输出。
提前判断NO情况只是为了加快速度而已(想拿第一页),但谁知都是神仙打表巨佬(0ms的那种)。
细节看代码
依旧n==10跑不动辣
代码
#include<bits/stdc++.h>
using namespace std;
int f[15][15],ans[15][15],a[205],n,vis[105],MINN=999999,TIM=0,flag=0;//a开这么多因为n*n*2-1最大只有199
inline void dfs(int step)
{
if (step>n*n)
{
TIM++;
if (TIM>10)
{
flag=1;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
exit(0);
return;//多余,个人习惯
}
int sum=0;
for (int i=1;i<=n;i++) sum+=f[1][i]+f[i][1];
if (MINN<=sum) return;//80分看过来
MINN=sum;
TIM=0;
for (int i=1;i<=n;i++)for (int j=1;j<=n;j++) ans[i][j]=f[i][j];
return;
}
int x=(step-1)/n+1;
int y=(step-1)%n+1;//常规,本人习惯这么打
for (int i=1;i<=n*n;i++)
{
if ((a[f[x-1][y]+i]==1||f[x-1][y]==-1)&&(a[f[x][y-1]+i]==1||f[x][y-1]==-1)&&(a[f[x+1][y]+i]==1||f[x+1][y]==-1)&&(a[f[x][y+1]+i]==1||f[x][y+1]==-1)&&vis[i]==0)//看,很方便吧(逃
{
vis[i]=1;
f[x][y]=i;
dfs(step+1);
f[x][y]=-1;
vis[i]=0;
}
}
}
void slove()
{
int m=2*n*n;
for (int i=2;i<=m;i++) a[i]=1;
a[1]=0;
for (int i=2;i<=m;i++) if (a[i]==1) for (int j=2;j<=m/i+1;j++) a[i*j]=0;
//for (int i=1;i<=n;i++) cout<<i<<" "<<a[i]<<endl;
}
int main()
{
//freopen("1.out","w",stdout);
cin>>n;
if (n==1||n==3||n==9) {cout<<"NO"<<endl;return 0;}
slove();
for (int i=0;i<=n+1;i++)for (int j=0;j<=n+1;j++)f[i][j]=-1;//这样判断边缘要方便许多,但如果n==1要特判。。。
dfs(1);
if (flag==0)
{
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
}
return 0;
}
Luogu P1549 棋盘问题(2)的更多相关文章
- luogu P1549 棋盘问题(2) 题解
luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...
- luogu 1169 棋盘制作(单调栈/悬线)
luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应 ...
- 洛谷P1549 棋盘问题(2)
P1549 棋盘问题(2) 题目描述 在N*N的棋盘上(1≤N≤10),填入1,2,…,N*N共N*N个数,使得任意两个相邻的数之和为素数. 例如:当N=2时,有: 其相邻数的和为素数的有: 1+2, ...
- 洛谷——P1549 棋盘问题(2)
P1549 棋盘问题(2) 搜索||打表 #include<cstdio> #include<cstring> #include<iostream> #includ ...
- Luogu P1436 棋盘分割 暴力DP
我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组.... 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和. 然后初始化时用 ...
- [POJ] 1191 [LUOGU] P1436 棋盘分割
那个均方差,可以通过展开.合并Σ,发现最终只有Xi^2会对答案造成影响,其他都是定值,所以求出最小的和的平方就行. 其实这才是这题最难的部分,以下都是码农部分. f[x1][y1][x2][y2][k ...
- 杂项 List
题目 1. 栈 #A 表达式的转换 (Unaccepted) 2. STL 模板库 #B 双栈排序(Unaccepted) #C 垃圾陷阱(Accepted) #D 合并果子(Acc ...
- [P1169] 棋盘制作 &悬线法学习笔记
学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...
- 历年NOIP题
做了几天远古老题,发现不可做,于是咕掉..转而从2005开始.. 1997: P1549 棋盘问题(2):搜索,优化搜索顺序,对于第一行第一列先搜小的(但是其实这样是错的,仅仅能过原题) 加强版咕. ...
随机推荐
- ELK环境配置
一.安装java环境 1.下载jre并安装,安装过程中没有什么特殊的,一直默认下一步即可. 2.配置环境变量 其中变量值为我们安装的jre的路径 二.安装elasticsearch 1.下载es安装包 ...
- BZOJ 3174 拯救小矮人(贪心+DP)
题意 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚到肩 ...
- Codeforces914G Sum the Fibonacci(FWT)
FWT大杂烩.跟着模拟做很多次FWT即可. #include<iostream> #include<cstdio> #include<cmath> #include ...
- NetBeans无法使用svn相关功能
本来中NetBeans使用subversion功能只要下载过subversion客户端就可以直接使用了,我也一直是这样的,可是今天忽然的不能用了,发现问题是因为我在文件中使用subversion的比较 ...
- 【BZOJ1452】[JSOI2009]Count(树状数组)
[BZOJ1452][JSOI2009]Count(树状数组) 题面 BZOJ 洛谷 题解 数据范围这么小?不是对于每个颜色开一个什么东西记一下就好了吗. 然而我不会二维树状数组? 不存在的,凭借多年 ...
- BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案
链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...
- bug5 Debug:This kind of launch is configured to openthe debug perspective when it解决办法
启动tomcat时,myeclipse报错: This kind of launch is configured to openthe debug perspective when itsuspend ...
- js中全局变量修改后的值不生效【jsp页面中各个js中内容的加载顺序】
一个老项目中,一个jsp文件中有很多个js文件, 现在要在页面上的一个地方判断一个状态,因为一直找不到原来是在哪里修改的那个状态,所以决定不找了,而是在比较靠前引入的一个js中定义一个全局变量,然后在 ...
- sklearn5_preprocessing数据标准化
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- vue 使用v-cloak让在页面加载时不显示{{}}花括号
官方说法: 这个指令保持在元素上直到关联实例结束编译. 和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准 ...