P1549 棋盘问题(2)

搜索||打表

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib> using namespace std; int n,p[][],an[][],hang,lie,ans[][];
bool vi[]; void print(){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
printf("%d ",ans[i][j]);
puts("");
}
} void scz(){
int han=,li=;
for(int i=;i<=n;i++) han+=an[][i],li+=an[i][];
if(han>hang||li>lie) return;
hang=han,lie=li;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
ans[i][j]=an[i][j];
} void dfs(int x,int y){
if(y==n+){
int sum=;
if(x==&&hang!=) {
for(int i=;i<=n;i++) sum+=an[][i];
if(sum>hang) return;
hang=sum;
}
x++,y=;
}
if(x==n+&&y==) {
scz();
print();
exit();
return;
}
if(y==&&x==n&&lie!=){
int sum=;
for(int i=;i<=n;i++) sum+=an[i][];
if(sum>lie) return;
lie=sum;
}
if(x==||y==){
for(int i=;i<=n*n;i++){
if(vi[i]) continue;
int z=an[x][y-],s=an[x-][y];
if(z&&!p[z][i]) continue;
if(s&&!p[s][i]) continue;
an[x][y]=i;vi[i]=;
dfs(x,y+);
an[x][y]=;vi[i]=;
}
}
else {
for(int i=n*n;i>=;i--){
if(vi[i]) continue;
int z=an[x][y-],s=an[x-][y];
if(z&&!p[z][i]) continue;
if(s&&!p[s][i]) continue;
an[x][y]=i;vi[i]=;
dfs(x,y+);
an[x][y]=;vi[i]=;
}
}
} bool tp(int x){
for(int i=;i<=sqrt(x);i++)
if(x%i==) return false;
return true;
} void yu(){
for(int i=;i<=n*n;i++){
for(int j=;j<=n*n;j++){
if(tp(i+j)) p[i][j]=;
  }
}
} int main()
{
scanf("%d",&n);
if(n==) printf("NO\n");
else{
hang=lie=;
yu();
vi[]=;
an[][]=;
dfs(,);
if(hang==) cout<<"NO\n";
else print();
}
return ;
}

洛谷——P1549 棋盘问题(2)的更多相关文章

  1. 洛谷P1549 棋盘问题(2)

    P1549 棋盘问题(2) 题目描述 在N*N的棋盘上(1≤N≤10),填入1,2,…,N*N共N*N个数,使得任意两个相邻的数之和为素数. 例如:当N=2时,有: 其相邻数的和为素数的有: 1+2, ...

  2. 2017普及组D1T3 洛谷P3956 棋盘

    2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...

  3. 洛谷 P3956 棋盘 解题报告

    P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...

  4. 洛谷P1436 棋盘分割

    洛谷题目链接 动态规划: 我们设状态$f[i][j][o][p][k]$表示一个矩形,左上角顶点坐标为$(i,j)$,右下角顶点坐标为$(o,p)$时分割了$k$次,也就是说现在是$k+1$块 我们考 ...

  5. 洛谷 P1436 棋盘分割 解题报告

    P1436 棋盘分割 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共 ...

  6. 洛谷 P1548 棋盘问题

    题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(30%) 求出该棋盘中包含有多少个正方形.多少个长方形(不包括正方形). 例如:当 N=2, M= ...

  7. 洛谷——P1548 棋盘问题

    https://www.luogu.org/problem/show?pid=1548#sub 题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(3 ...

  8. 洛谷 P3956 棋盘

    题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上 ...

  9. 洛谷P1169 棋盘制作(悬线法)

    题目链接:https://www.luogu.org/problemnew/show/P1169 #include<bits/stdc++.h> #define fi first #def ...

随机推荐

  1. js执行“按回车”的动作

    <textarea class="W_input" style="overflow: hidden; height: 23px;" node-type=& ...

  2. HTTP要点概述:十一,HTTP状态码

    一,状态码: 状态码告知从服务器返回的请求结果.用户借助状态码可以判断服务器是正常处理了请求,还是发生了错误. 状态码比如200 OK,以3位数字和原因短语组成. 数字中的第一位制定了相应的类别,后两 ...

  3. node inspector的安装以及使用【已经淘汰了】

    https://github.com/node-inspector/node-inspector 前提 1.npm install -g node-pre-gyp https://github.com ...

  4. CollapsingToolbarLayout Toolbar的title覆盖问题

    CollapsingToolbarLayout 里: 1 2 app:titleEnabled="true" app:title="Hello" Toolbar ...

  5. python-----删除小于2k的文件

    删除小于2k的文件,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/10 15:34 # @Author : ...

  6. RDA 工模

    1.工模GUI如下图: 注意两个API接口,_APP_Update_Layer()/UpdateNodeFunctionContent() 这两个接口一个是刷新ListView,另一个刷新ListVi ...

  7. 10.24afternoon清北学堂刷题班

    /* 这是什么题... */ #include<iostream> #include<cstdio> #include<cstring> #include<q ...

  8. P3573 [POI2014]RAJ-Rally

    传送门 很妙的思路 首先这是一个DAG,于是我们先在原图和反图上各做一遍,分别求出\(diss_i\)和\(dist_i\)表示从\(i\)点出发的最短路和以\(i\)为终点的最短路 我们考虑把点分为 ...

  9. 【转】@Controller和@RestController的区别

    知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用. 1) 如果只是使用@RestController注解Controller,则Co ...

  10. mysql——免安装配置

    1.下载 (1)下载地址:https://dev.mysql.com/downloads/mysql/ (2)选择下载 2.配置环境变量 (1)解压目录:D:\mysql-8.0.16-winx64 ...