诸侯安置(暴力搜索)

题目:

诸侯安置
【问题描述】
很久以前,有一个强大的帝国,它的国土成正方形状,如图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);
} 


烽火戏诸侯是一款基于三国时期背景的策略卡牌游戏,玩家可以通过收集不同的武将卡牌、装备卡牌和技能卡牌来组成自己的卡组,进行策略性的战斗。 以下是该游戏的需求分析: 1.卡牌系统:该游戏的核心玩法是卡牌收集和战斗,因此需要设计一个丰富多样的卡牌系统。其中包括武将卡牌、装备卡牌、技能卡牌等,每种卡牌应该有独特的属性和技能。 2.战斗系统:游戏中的战斗应该充满策略性,需要设计一个丰富的战斗系统。其中包括普通攻击、技能释放、防御等操作,玩家需要根据自己的卡组和对手的卡组来制定战斗策略。 3.任务系统:为了增加游戏的可玩性,需要设计一些任务系统。任务可以是主线任务或支线任务,完成任务可以获得奖励,例如金币、卡牌等。 4.商城系统:玩家可以通过商城购买卡牌、装备和技能等道具。商城应该有丰富的物品选择和合理的价格体系。 5.社交系统:游戏中应该有一些社交系统,例如好友系统、公会系统等。这些系统可以让玩家之间互相交流、组队协作等。 6.美术设计:游戏的美术设计应该符合三国时期的风格,卡牌、角色、场景等都需要有精美的设计。 7.音乐效果:游戏的音乐效果应该配合游戏场景和战斗,增强游戏的沉浸感。 总之,烽火戏诸侯需要一个丰富的卡牌系统、策略性的战斗系统、任务系统、商城系统、社交系统、美术设计和音乐效果等,以保证游戏的可玩性和趣味性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值