P1096 [NOIP2007 普及组] Hanoi 双塔问题
f[n]=2*f[n-1]+2
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<bits/stdc++.h> #define ll long long #define ddd printf("-----------------debug\n"); using namespace std; int n; struct lxt { int len,ans[1000]; }f[300]; lxt jia(lxt x,lxt y) { lxt Ans; memset(Ans.ans,0,sizeof(Ans.ans)); for(int i=1;i<=max(x.len,y.len);i++) Ans.ans[i]=x.ans[i]+y.ans[i]; for(int i=1;i<=max(x.len,y.len);i++){ Ans.ans[i+1]+=Ans.ans[i]/10; Ans.ans[i]=Ans.ans[i]%10; } if(Ans.ans[max(x.len,y.len)+1]) Ans.len=max(x.len,y.len)+1; else Ans.len=max(x.len,y.len); return Ans; } void work(int n) { f[1].ans[1]=2; f[1].len=1; f[0].ans[1]=2; f[0].len=1; for(int i=2;i<=n;i++) f[i]=jia( jia(f[i-1],f[i-1]),f[0] ); for(int i=f[n].len;i>=1;i--) cout<<f[n].ans[i]; cout<<endl; } int main() { ios::sync_with_stdio(false); cin>>n; work(n); return 0; }
                    
                
                
            
        
浙公网安备 33010602011771号