诸侯安置(暴力搜索)
来源:互联网 发布:淘宝小礼品批发1元以下 编辑:程序博客网 时间:2024/04/27 17:04
题目:
诸侯安置
【问题描述】
很久以前,有一个强大的帝国,它的国土成正方形状,如图1 所示
这个国家有若干诸侯。由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地
(正方形中的一格)。但是,这些诸侯又非常好战,当两个诸侯位于同一行或同一列时,他们
就会开战。如下图2 为n=3 时的国土,阴影部分表示诸侯所处的位置。前两幅图中的诸侯可
以互相攻击,第三幅则不可以。
国王自然不愿意看到他的诸侯们互相开战,致使国家动荡不安。因此,他希望通过
合理的安排诸侯所处的位置,使他们两两之同都不能攻击。
现在,给出正方形的边长n,以及需要封地的诸侯数量k,要求你求出所有可能的安置
方案数。(n≤100,k≤2n2-2n+1)
由于方案数可能很多,你只需要输出方案数除以504 的余数即可。
【输入】
仅一行,两个整数n 和k,中阍用一空格隔开。
【输出】
一个整数,表示方案数除以504 的余数。
【样例】
empire.in empire.out
2 2 4
#include<iostream>#include<cstdio>#include<math.h>using namespace std;int n,m,ans = 0;int a[105];void init(){scanf("%d%d",&n,&m);} void dfs(int p,int now){if(now == m){ans = (ans+1)%504;//当now到达指定的个数时返回,并将答案加1mod504; return ;}if(p == n*2)return;//当行到n*2时返回 dfs(p+1,now);//先递归到最后一层,在返回是进行搜索,方便计算列的区间 for(int i = 1+abs(n-p);i <= 2*n-1-abs(n-p); i++){//这样可以得到没一层的列的区间 int j;for(j = 1;j < p;j++)if(a[j] == i)break;//判断在这一列上是否有诸侯 if(j == p){a[p] = i;dfs(p+1,now+1);//记录坐标并到下一层 }}}int main(){freopen("Empire.in","r",stdin);freopen("Empire.out","w",stdout);init();dfs(1,0); printf("%d",ans);}
0 0
- 诸侯安置(暴力搜索)
- 诸侯安置 搜索02 empire
- 【洛谷 P1240】诸侯安置(Dp)
- 诸侯安置DP做法
- 洛谷 P1240 诸侯安置
- coj 1504 放置棋子(诸侯安置)dp
- 洛谷P1240 诸侯安置 递推
- dp——洛谷P1240 诸侯安置
- 路由器安置(Routing)
- 搜索(字符串暴力)
- 路由器安置(routing)Solution
- FLIP GAME(暴力搜索)
- 【USACO】Wormholes(暴力搜索)
- 225 - Golygons(暴力搜索)
- 蓝桥杯--带分数(暴力搜索)
- The Clocks(暴力搜索)
- 暴力搜索
- 暴力搜索
- Docker默认存储路径修改
- 天遥G10五模全智能鼠标强化软件 V14.12V02正式版
- 我的Android进阶之旅------>解决DownloadManager报错java.lang.SecurityException: Invalid value for visibility: 2
- IOS应用架构思考一(网络层)
- 应用服务器吞吐量优化之异步线程
- 诸侯安置(暴力搜索)
- 从什么都不懂开始(一)——什么是Git
- curl 返回响应头
- hdu1542 Atlantis【矩形面积并+线段树】
- 鲜为人知而又实用的 Linux 命令大全
- Android 自定义View时处理wrap_content和padding的方法
- cmake
- cifar代码
- Mysql与Sql server在语法和关键字上的区别