第五第六课------递推+记忆话搜索+搜索八皇后(思想是做梦)+各种剪枝思想

搜索是一个漫长的过程贯彻整个oi;

八皇后-------

#include <bits/stdc++.h>
#define inf 0x7f
using namespace std;
int n,ans,a[inf],b[inf],c[inf],d[inf];
void print(){
 ++ans;
 if(ans<=3){
 for(int i=1;i<=n;i++) cout<<d[i]<<" ";
 cout<<endl;
 }

void s(int k){//行
for(int i=1;i<=n;i++){//枚举每一列
if(a[i]==0&&b[k-i+n]==0&&c[i+k]==0){
  d[k]=i;
  a[i]=1;
 b[k-i+n]=1;
 c[i+k]=1;

if(i==n) print();
 else s(k+1);
 b[k-i+n]=0;
 c[i+k]=0;
 a[i]=0;
}
 }
 ;
}

int main(){
cin>>n;
s(1);
cout<<ans;
return 0;
}

上述代码是有问题的,目前还未找出;

递推讲了基本的

卡特兰数是 an=an-1+2(n-1),具体请见课件

第二类斯特林数  】n个有区别的球放到m个相同的盒子中,要求无一空 盒,其不同的方案数用S(n,m)表示,称为第二类Stirling数。  S2(n,m)=mS2(n-1,m)+S2(n-1,m-1)   (n>1,m1)要么将n-1个球放进所有盒子里其中最后一个球可以放进任意一个,另外一个就是只把一个球放在盒子里;

斐波拉契 f(n)=f(n-1)+f(n-1)//请参照兔子定理

最重要的是要自己根据前面与后面的关系(就是前面是怎么从后面来的)

可行性剪纸和最优性剪纸请自学;

原文地址:https://www.cnblogs.com/sc-pyt-2021-theworld/p/10113655.html

时间: 2024-10-10 20:23:49

第五第六课------递推+记忆话搜索+搜索八皇后(思想是做梦)+各种剪枝思想的相关文章

Bailian1664 Placing apples【递推+记忆化递归】

1664:Placing apples 总时间限制: 1000ms 内存限制: 65536kB 描述 We are going to place M same apples into N same plates. There could be some empty plates. How many methods do we have? When we have 7 applesand 3 plates, the methods, (1, 5, 1) and (5, 1, 1) are the

第五十六课 云计算模型 openstack架构、keystone基础及部署

虚拟机及云计算模型介绍 OpenStack  Overview OpenStack  演示架构.Keystone基础及部署 Glance基础原理及部署应用

JAVA学习第五十六课 — IO流(十)对象的序列化和反序列化 &amp; RandomAccessFile

操作对象 ObjectInputStream.ObjectOutputStream 被操作的对象需要实现Serializable(标记接口) ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStream 读取(重构)对象.通过在流中使用文件可以实现对象的持久存储.如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象. 对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的

HDU4919 Exclusive or(递推+记忆化搜索+大数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4919 题意: 给定n求sigma(i^(n - i)) (1<=i<=n-1) 分析: 打表后可以发现规律 1) n = 2 * k + 1; f[n] = 4 * f[k] + 6; 2) n = 2 * k f[n] = 2 * f[k] + 2 * f[k-1] + 4 * k - 4; 具体的证明:http://blog.csdn.net/houserabbit/article/detai

第五十六课 树中结点的删除操作

返回的指针谁来负责释放呢?我们采取的措施是使用智能指针来管理这棵树的生命周期. 返回一棵子树的好处是在某些场合,我们能够将H.I.J.M重组,并将它们重新的加回原来的树中. 示例: main函数使用了p指针指向的内存,但是不负责释放,因为从main函数的角度来看,这片内存不是main函数申请的,而从func函数的角度来看,这片内存是申请给main函数用的,func返回之后就无法控制这片内存了.而C++本身又没有内存释放机制.因此,这片内存处于三不管地带,我们要用智能指针来管理. 于是改造成如下的

hdu4283 You Are the One 区间dp 记忆化搜索or递推

You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3032    Accepted Submission(s): 1352 Problem Description The TV shows such as You Are the One has been very popular. In order to

数字三角形——递归、递推、记忆化搜索

数字三角形 描述: 有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外没个数的左下方和右下方各有一个数. 问题: 从第一行的数开始,每次可以往左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来.如何走才能使得这个和尽量大? 分析: 不难看出此题是一个动态的决策问题:每次有两种选择--左下或右下.如果用回溯法求出所有的可能的路线,就可以从中选出最优的路线.但和往常一样,回溯法的效率太低:一个n层数字三角形的完整路线有2^n条,当n很大时回溯法的速度将让人无法忍受.因此本题讨论用

动态规划 数字三角形(递归,递推,记忆化搜索)

题目要求: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的数字三角形中寻找在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或右下走.只需要求出这个最大和即可,不必给出具体路径. 三角形的行数大于1小于等于100,数字为 0 - 99 输入格式: 5 //三角形行数.下面是三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 解题思路: 用二维数组存放数字三角形 D[r][j] //表示第i行第j个元素的

动态规划&mdash;&mdash;数字三角形(递归or递推or记忆化搜索)

动态规划的核心就是状态和状态转移方程. 对于该题,需要用抽象的方法思考,把当前的位置(i,j)看成一个状态,然后定义状态的指标函数d(i,j)为从格子出发时能得到的最大和(包括格子本身的值). 在这个状态定义下,原问题的解就是d(i,j). 下面看一下不同状态之间如何转移.从格子(i,j)出发有两种策略.如果向左走,则到(i+1,j)后需要求"从(i+1,j)出发能得到的最大和"这一问题,即d(i+1,j). 类似的,往右走之后需要求解d(i+1,j+1).由于可以在这两个决策中自由选