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

搜索是一个漫长的过程贯彻整个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)//请参照兔子定理
最重要的是要自己根据前面与后面的关系(就是前面是怎么从后面来的)
可行性剪纸和最优性剪纸请自学;

 

posted @ 2018-12-13 22:57  spytc  阅读(244)  评论(0编辑  收藏  举报