• 搜索---幸运三角形


    //一、

    #include<iostream>

    #include<cstring>

    using namespace std; 

    int main(){  

     int n,ans[22];

     memset(ans,0,sizeof(ans));//

     ans[3]=4;ans[4]=6;ans[7]=12;ans[8]=40;ans[11]=171;ans[12]=410;  ans[15] = 1896;ans[16]=5160;ans[19]=32757;ans[20]=59984;

     while(cin>>n)

      cout<<ans[n]<<endl;

     return 0;

    }

    //二、

    #include <iostream>

    using namespace std;

    class Triangle {

     friend int compute(int);

    private:  

    void Backtrack(int t);

     int n,     //第一行的符号个数  

     half,  //n*(n+1)/4

      count, //当前‘+’个数  

     **p;  //幸运三角形矩阵

     long sum; //已找到的幸运三角形个数

    };

    void Triangle::Backtrack(int t) {

     if((count>half)||(t*(t-1)/2-count>half))//当搜索到此层时,如果'+'或’-‘有大于总符号的一半,就退出;

      return ;

     int i,j;

     if(t>n)

      sum++;

     else   for(i=0;i<2;i++)   {

       p[1][t]=i;   

     count+=i;

       for(j=2;j<=t;j++)    {  

       p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2]; //由p[1][t]的值退出t左斜下方的符号;   

      count+=p[j][t-j+1]; //如果为1 则

    count++;  

      }    Backtrack(t+1);  

      for(j=2;j<=t;j++)   

      count-=p[j][t-j+1];   

     count-=i;   

    }

    }

    int compute(int n)//计算节点为n的幸运三角形的个数;

    {  Triangle x;

     x.n=n;  

    x.count=0;

     x.half=n*(n+1)/2;

     x.sum=0;

     if(x.half%2==1)//如果三角形中总符号数为奇数,则返回0;

      return 0;

     x.half=x.half/2;

     int i,j;

     int **p=new int *[n+1];

     for(i=0;i<=n;i++)  

     p[i]=new int [n+1];

     for(i=0;i<=n;i++)  

     for(j=0;j<=n;j++)  

      p[i][j]=0;  x.p=p;

     x.Backtrack(1);

     return x.sum;

    }

    int main() {

     int n;

     while(cin>>n)  {

      int res=compute(n);  

     cout<<res<<endl;

     }

     return 0;

    }

  • 相关阅读:
    学习java集合LinkedHastSet
    学习java,equals方法
    学习java,入门语言java的感概
    学习java哈希值,java入门编程语言
    学习java集合HashSet
    学习java集合set集合
    学习java集合LinkedList
    学习java集合Arraylist
    学习java集合list集合
    学习Java数据结构(入门选Java)
  • 原文地址:https://www.cnblogs.com/CAOYR/p/5513489.html
Copyright © 2020-2023  润新知