zoj 1239 Hanoi Tower Troubles Again!

来源:互联网 发布:淘宝外卖会员卡 编辑:程序博客网 时间:2024/05/16 07:26
#include <iostream>#include <cmath>#include <cstring>using namespace std;int a[51], sum, T;int p(int w){//i是当前要放的求的编号for(int i = 1; i <= T; i++){//逐一判断能不能放int tem_sum = a[i] + w;int gen = (int)sqrt(tem_sum) * (int)sqrt(tem_sum);if(tem_sum == gen || a[i] == 0){a[i] = w;sum++;p(w + 1);return 1;}}return 0;}int main(){int iCase;cin>>iCase;while(iCase--){cin>>T;sum = 0;memset(a, 0, sizeof(a));//a数组存储最上面的球的大小if(p(1))cout<<sum<<endl;elsecout<<"-1"<<endl;}return 0;}


更快的就是1. 公式 f(n) = n*n/2+n-0.5向下取整

  2. 规律 f(n) = f(n - 1) + (n + 1) / 2 + (n + 1) / 2    (n > 2), 由于这个程序较为简单,这里不提供