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. mySQL (关系型数据库管理系统)

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RD ...

  2. mybtis 逆向

    mbg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfi ...

  3. Semaphore and SemaphoreSlim

    https://msdn.microsoft.com/en-us/library/z6zx288a(v=vs.110).aspx The System.Threading.Semaphore clas ...

  4. win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程( Win7 SQL Server2005 安装教程)

    win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程 由于工作需要,今天要在电脑上安装SQL Server 2005.以往的项目都是使用Oracle,MS的 ...

  5. Codeforces Round #395 (Div. 1)

    比赛链接:http://codeforces.com/contest/763 A题: #include <iostream> #include <cstdio> #includ ...

  6. [Advance] How to debug a program (上)

    Tool GDB Examining Memory (data or in machine instructions) You can use the command x (for “examine” ...

  7. [IOI2005]Riv 河流

    https://www.zybuluo.com/ysner/note/1300088 题面 有一棵\(n\)个点的树,现在在上面放\(k\)个标记,使得每个点的权值乘上自己到最近的标记祖先的距离的和最 ...

  8. 用React & Webpack构建前端新闻网页

    这是一篇给初学者的教程, 在这篇教程中我们将通过构建一个 Hacker News 的前端页面来学习 React 与 Webpack. 它不会覆盖所有的技术细节, 因此它不会使一个初学者变成大师, 但希 ...

  9. ssh验证和端口转发

    ssh 服务登录验证 ssh 服务登录验证方式: 用户/ 口令 基于密钥 基于用户和口令登录验证 客户端发起ssh请求,服务器会把自己的公钥发送给用户 用户会根据服务器发来的公钥对密码进行加密 加密后 ...

  10. [Swift]Set(集)转换为Array(数组)

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...