这道题目的第一感觉肯定是很像八皇后!!!可是它并不是八后所以我们需要使用一种逆向思维去思考!
题目大家应该都知道了,我就不讲了,这里主要讲思路:
重新描述一下问题,其实就是在一个边长为 2n-1 的正菱形(如上左图为 n=3的情形)上摆放 k 个棋子,使得任意两个棋子都不在同一行、同一列。试问:这样的摆法共有多少种?

看到这道题目,我们就会立即想起一道经典的老题目:n 皇后问题。这道题目与 n 皇后问题非常相似。但有两个不同点:一是 n 皇后问题可以斜着攻击对方棋子,而本题不能;二是 n 皇后问题是在 n,n 的正方形棋盘上面放置 k 个皇后,而本题却是在一个正菱形上摆放。我们试着先将 n 皇后变为不可斜攻的,再作思考,如果不能够斜着攻击,n 皇后的公式是:(C(k,n))^2*k!。但是本题不是一个正方形,所以这个公式对本题好像没有任何帮助。看来只能够从另外一个角度思考问题了。

首先想到在 2n-1 列中任意取出 k 列进行具体分析,这样一来问题就转化成:有一个长为 k 的数列(无重复元素),每一个数在一个不定的区间[a,b]当中,第 i 个数一定在区间[ai,bi]之间,求这样的数列有多少种? 如果就是这个问题,那么比较难解决,但若把这个数列放在本题中,就比较简单。

因为题目中任意两个区间都是一种包含关系。可以先把区间按照长度排一下序,就可以看出来,再用乘法原理进行求解即可。但是,n 最多可到 100,k 最多可到 50,穷举要进行 C(50,100)种方案! 显然无法在 1s 内出解!那么怎么办呢?

再继续分析一下问题发现,里面有重叠子问题。如果一个列作为最后一列,且这一列以及前面所有列共放置 p 个诸侯,设有 q 种情况,那么这一列后面的所有列共放置 p+1 个棋子的方案数都要用到 q,从而引用乘法原理。而且在穷举过程中,这一个工作做了许多遍,所以干脆用递推。递推前,先把图形转化为类似右图的形式(即列排序)。
设 f[i,j]表示以第 i 列为最后一列,放置 j 个棋子的总方案数,得出公式:
i-j+1
Σf[i-k][j-1]*(i-j-1+i*2);
k=1
不过还要注意,当 k≥2n-1 时,问题无解。
下面放代码:

#include<stdio.h>
#include<stdlib.h>
int dp[5000][5000];
int main(){int i,j,k,n,m;freopen("empire.in","r",stdin);freopen("empire.out","w",stdout);  scanf("%d%d",&n,&m);n=2*n-1;if(m==0){printf("1\n");return 0;}if(m>=n){printf("0\n");return 0;}for(i=1;i<=n;i++)if(i%2==1)dp[i][1]=i;else dp[i][1]=i-1;for(i=1;i<=n;i++)for(j=2;j<=i;j++)for(k=1;k<=i-j+1;k++){dp[i][j]+=dp[i-k][j-1]*(i-j+i%2);dp[i][j]%=504;}  for(i=m;i<n;i++)  {  dp[n][m]+=dp[i][m];  dp[n][m]%=504;  }  printf("%d\n",dp[n][m]);  return 0;
}

诸侯安置 搜索02 empire相关推荐

  1. 诸侯安置(暴力搜索)

    题目: 诸侯安置 [问题描述] 很久以前,有一个强大的帝国,它的国土成正方形状,如图1 所示 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地 (正方形中的一格).但是,这 ...

  2. 【洛谷】 P1240 诸侯安置(递推)

    洛谷P1240 诸侯安置 点击此处去OJ 问题描述 很久以前,有一个强大的帝国,它的国土成正方形状(需旋转45°来看),图1所示为n=3时的情况.这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,因此 ...

  3. 诸侯安置 简单的递推

    诸侯安置 Problem Description 很久以前,有一个强大的帝国,它的国土呈正方形状(转45度看),如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地 ...

  4. P1240 诸侯安置 [dp]

    P1240 诸侯安置 这道题跟前面的"车的放置"是差不多的.只不过那道题碰巧可以用组合数解决,而这道题只能用dp. 首先要转换这个图,这个图这么奇怪显然无法dp. 我们只需要如第二 ...

  5. 【递归与递推】诸侯安置

    [递归与递推]诸侯安置 题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图2-2所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是 ...

  6. 【洛谷 P1240】诸侯安置

    题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战,当两个诸 ...

  7. 洛谷 P1240 诸侯安置

    题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战,当两个诸 ...

  8. 洛谷P1240 诸侯安置

    传送门 题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战, ...

  9. dp——洛谷P1240 诸侯安置

    https://www.luogu.org/problem/show?pid=1240 哇很好的一道题目诶: 和那个八皇后很像的,但是八皇后是一年前做的题了: 这个我们搜索就算了,虽然用一些技巧也不是 ...

最新文章

  1. 阿里百度12个iOS 技术面试题及答案总结,希望对你有帮助!
  2. DedeCms模板防盗的方法
  3. css 中的若干心得
  4. 一款标注颜色,距离的小软件 markman
  5. 所有受限制的应用程序包_【译】使用Blazor构建桌面应用
  6. 引用类型传递参数的特殊情况(string)
  7. .net 深入系统编程(三)
  8. React 和 Vue的特点
  9. js面向对象与java面向对象的区别,被坑了,js语法跟Java面向对象语法还是有区别的...
  10. go get golang.org/x 包下载失败问题
  11. io口模拟串口 1602显示数据位内容[转]
  12. 苹果x用了2年了,当前4G信号时有时无,大家有遇到过么?
  13. Permute 3.6.4 小巧便捷的多媒体文件格式转换器
  14. 100个穷二代,每人100元,60岁前谁能翻盘?
  15. linux nginx启动脚本,Nginx启动脚本大家来找茬
  16. 南大软院21天学霸养成计划—第6天
  17. 世界水周:美国女高中生水污染解决方案获2021斯德哥尔摩青少年水奖
  18. 敏感词工具(sensitive word)的使用
  19. 基于微信理共享停车位预约小程序系统设计与实现 开题报告
  20. Java 环境JDK下载、安装以及环境变量配置详细图解

热门文章

  1. Jetson连接百兆交换机丢包笔记
  2. 计算机毕业设计之家庭理财管理系统的设计与实现
  3. 基于javaweb+jsp的家庭理财系统(java+SSM+JSP+Tomcat8+Mysql)
  4. 基于python的百度云网盘资源搜索引擎设计架构
  5. Linux 系统支持blacklist的kernel版本加载上海域格 CLM920 NC2 mdg 模块的驱动示例
  6. Java和C语言谁能更胜一筹?
  7. 2021-05-31以及2021-06-01(从136开始) JAVA学习笔记
  8. 利用plant simulation模拟交通信号灯控制小车通行
  9. 暗潮:微信小程序第三弹:关于微信小程序吸粉方式的可行性分析
  10. 语言模型训练工具SRILM