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 获取函数的所有参数名

    具体思路: 利用Function.toString()方法,获取到函数的源码,再利用正则匹配获取到参数名字. 实现代码(代码基于ES6): // 获取函数的参数名 function getParame ...

  2. ffmpeg-linux32-v3.3.1

    . imageio-binaries/ffmpeg at master · imageio/imageio-binaries · GitHub https://github.com/imageio/i ...

  3. linux 查看php扩展

    php -i |less 查看配置文件在哪里,编译参数 php -m |less 查看php加载的模块 less可以自由的上下访问,比more要灵活一点. 如果不使用less,信息一次性给予,不太好查 ...

  4. 学习Flash Builder编程的准备工作

    1. 下载教科书,Essential ActionScript 3.0或者Programming ActionScript 3.0.这将是你的很好的老师.英语不灵的买一本中文版本. 2. 安装Flas ...

  5. BZOJ_2120_数颜色_Set+树状数组+主席树

    BZOJ_2120_数颜色_Set+树状数组+主席树 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L ...

  6. 4.7.3 Canonical LR(1) Parsing Tables

    4.7.3 Canonical LR(1) Parsing Tables We now give the rules for constructing the LR(1) ACTION and GOT ...

  7. Django的CBV方式讲解

    CBV使用配置 路径url的配置 cbv 顾名知义就是通过类的方法来调用,我们在url中配置为如下路径 url(r'^cbv.html/', views.Cbv.as_view()), 这里的Cbv是 ...

  8. RDA 重现率

    文件目录: timing_info/AspectRatioOverscan&TimingTool/Aspect_Ratio_Overscan&Timing_Tool_330.xls 重 ...

  9. nginx 静态目录配置规则,路径匹配与本地资源

    经常配了nginx静态目录,死活访问不了,每次访问404.查看文档后,发现nginx配置静态目录使 用以下规则 假如nginx是在本机,静态目录也是在本机, 1.子目录匹配 如下配置 location ...

  10. win7 32位解决matlab out of memory问题

    由于最近在做DL,matlab load数据时由于内存只有2G,会出现out of memory的情况,网上百度了下都是在xp下打开3GB来解决该问题,但是由于win7没有boot.ini无法在win ...