诸侯安置 搜索02 empire
这道题目的第一感觉肯定是很像八皇后!!!可是它并不是八后所以我们需要使用一种逆向思维去思考!
题目大家应该都知道了,我就不讲了,这里主要讲思路:
重新描述一下问题,其实就是在一个边长为 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 所示 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地 (正方形中的一格).但是,这 ...
- 【洛谷】 P1240 诸侯安置(递推)
洛谷P1240 诸侯安置 点击此处去OJ 问题描述 很久以前,有一个强大的帝国,它的国土成正方形状(需旋转45°来看),图1所示为n=3时的情况.这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,因此 ...
- 诸侯安置 简单的递推
诸侯安置 Problem Description 很久以前,有一个强大的帝国,它的国土呈正方形状(转45度看),如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地 ...
- P1240 诸侯安置 [dp]
P1240 诸侯安置 这道题跟前面的"车的放置"是差不多的.只不过那道题碰巧可以用组合数解决,而这道题只能用dp. 首先要转换这个图,这个图这么奇怪显然无法dp. 我们只需要如第二 ...
- 【递归与递推】诸侯安置
[递归与递推]诸侯安置 题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图2-2所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是 ...
- 【洛谷 P1240】诸侯安置
题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战,当两个诸 ...
- 洛谷 P1240 诸侯安置
题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战,当两个诸 ...
- 洛谷P1240 诸侯安置
传送门 题目描述 很久以前,有一个强大的帝国,它的国土成正方形状,如图所示. 这个国家有若干诸侯.由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格).但是,这些诸侯又非常好战, ...
- dp——洛谷P1240 诸侯安置
https://www.luogu.org/problem/show?pid=1240 哇很好的一道题目诶: 和那个八皇后很像的,但是八皇后是一年前做的题了: 这个我们搜索就算了,虽然用一些技巧也不是 ...
最新文章
- 阿里百度12个iOS 技术面试题及答案总结,希望对你有帮助!
- DedeCms模板防盗的方法
- css 中的若干心得
- 一款标注颜色,距离的小软件 markman
- 所有受限制的应用程序包_【译】使用Blazor构建桌面应用
- 引用类型传递参数的特殊情况(string)
- .net 深入系统编程(三)
- React 和 Vue的特点
- js面向对象与java面向对象的区别,被坑了,js语法跟Java面向对象语法还是有区别的...
- go get golang.org/x 包下载失败问题
- io口模拟串口 1602显示数据位内容[转]
- 苹果x用了2年了,当前4G信号时有时无,大家有遇到过么?
- Permute 3.6.4 小巧便捷的多媒体文件格式转换器
- 100个穷二代,每人100元,60岁前谁能翻盘?
- linux nginx启动脚本,Nginx启动脚本大家来找茬
- 南大软院21天学霸养成计划—第6天
- 世界水周:美国女高中生水污染解决方案获2021斯德哥尔摩青少年水奖
- 敏感词工具(sensitive word)的使用
- 基于微信理共享停车位预约小程序系统设计与实现 开题报告
- Java 环境JDK下载、安装以及环境变量配置详细图解
热门文章
- Jetson连接百兆交换机丢包笔记
- 计算机毕业设计之家庭理财管理系统的设计与实现
- 基于javaweb+jsp的家庭理财系统(java+SSM+JSP+Tomcat8+Mysql)
- 基于python的百度云网盘资源搜索引擎设计架构
- Linux 系统支持blacklist的kernel版本加载上海域格 CLM920 NC2 mdg 模块的驱动示例
- Java和C语言谁能更胜一筹?
- 2021-05-31以及2021-06-01(从136开始) JAVA学习笔记
- 利用plant simulation模拟交通信号灯控制小车通行
- 暗潮:微信小程序第三弹:关于微信小程序吸粉方式的可行性分析
- 语言模型训练工具SRILM