多重幂计数问题

来源:互联网 发布:数据恢复大师手机版 编辑:程序博客网 时间:2024/05/16 14:54

问题:

给定n个变量x1,x2,x3…xn。将这些变量依次作为底和幂,可得n重幂如下

xn

  

x3

x2

x1

上述的n重幂是不确定的,当其中加入适当的括号之后,才能成为一个确定的n重幂。不同的加括号方式导致不同的n重幂。例如,当n=4时,全部的4重幂有5个。问对n个变量计算出有多少个不同的n重幂。

分析:


本题跟矩阵链乘法是相同的题目。假设s[i]表示长度为i加括号的总数,当i=1时,s[i]=1。当n>=2时,s[i] =  ∑s[k]*s[i-k] ,其中k的取值范围为1..i-1.

于是代码如下:

#include "stdafx.h"#include<iostream>#include<vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int n;cin>>n;vector<int> s;for(int i=0;i<=n;i++)s.push_back (0);s[0]=s[1]=1;for(int i=2;i<=n;i++){for(int k=1;k<i;k++)s[i]+=s[k]*s[i-k];}cout<<s[n]<<endl;return 0;}