问题描述: 就是求枚举结果,不过是以 逻辑树的形式。 算法如下: #include iostream using namespace std ; int num ; void cal ( int m ){ if ( ! m ){ num ++ ; return ; } if ( m - 1 = 0 ) cal ( m - 1 ); m = m - 1 ; if
问题描述:
就是求枚举结果,不过是以 逻辑树的形式。
算法如下:
#include <iostream>using namespace std;
int num;
void cal(int m){
if(!m){
num++;
return;
}
if(m-1>=0) cal(m-1);
m=m-1;
if(m-2>=0) cal(m-2);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int m;
cin>>m;
num=0;
cal(m);
cout<<num<<endl;
num=0;
}
}
注释:
AC通过为100;
1.这个问题以前见过,没想到这次做起来这么得心应手!!! 看来算法练习真的十分必要啊。
2.注意,逻辑深度 走了的步骤需要减去,这里是减去一,2没有减是因为,2的作用域只在子树中,所以可以不用减。