题解:设d[n]是三塔问题的解,f[n]是4塔的解,那么可以推导出,f[n]=min(2*f[i]+d[n-i]),1<=i<n;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=21;
ll d[maxn],f[maxn];
int main(){
int n=12;
d[0]=0;
for(int i=1;i<=maxn;i++){
d[i]=2*(d[i-1]+1)-1;
}
f[1]=1;
for(int i=2;i<=n;i++){
f[i]=2*f[1]+d[i-1];
for(int j=2;j<i;j++){
f[i]=min(f[i],2*f[j]+d[i-j]);
}
}
for(int i=1;i<=12;i++){
cout<<f[i]<<endl;
}
return 0;
}