考虑递推。
d[i]表示在三塔的情况下 d[i]=d[i-1]*2+1
f[i]表示在四塔的情况下 f[i]=f[j]*2+d[i-j] (1<=j<i)
#include<cstdio> using namespace std; inline int min(int a,int b){return a<b?a:b;} const int N=15,inf=999999999; int d[N],f[N]; int main(){ d[1]=f[1]=1; for(int i=2;i<=12;++i)d[i]=d[i-1]*2+1; for(int i=2;i<=12;++i){ f[i]=inf; for(int j=1;j<i;++j)f[i]=min(2*f[j]+d[i-j],f[i]); } for(int i=1;i<=12;++i)printf("%d ",f[i]); return 0; }