今天领略到分治思想的妙处,当大的问题可以通过缩减规模成为相同性质的小问题是,当数据足够小,那么也就解决了这个问题
1 #include <iostream> 2 #include <cstring> 3 #include <string> 4 #include <map> 5 #include <set> 6 #include <algorithm> 7 #include <fstream> 8 #include <cstdio> 9 #include <cmath> 10 #include <stack> 11 #include <queue> 12 #define lson l,m,rt<<1 13 #define rson m+1,r,rt<<1|1 14 using namespace std; 15 const double Pi=3.14159265358979323846; 16 typedef long long ll; 17 const int MAXN=1024+5; 18 const int dx[5]={0,0,0,1,-1}; 19 const int dy[5]={1,-1,0,0,0}; 20 const int INF = 0x3f3f3f3f; 21 const int NINF = 0xc0c0c0c0; 22 const ll mod=1e9+7; 23 int a[MAXN][MAXN]; 24 int l; 25 void dfs(int x,int y,int k) 26 { 27 if(k==0) 28 { 29 return; 30 } 31 a[x+(int)pow(2,k-1)][y]=a[x][y]+pow(2,k-1); 32 a[x][y+(int)pow(2,k-1)]=a[x][y]+pow(2,k-1); 33 a[x+(int)pow(2,k-1)][y+(int)pow(2,k-1)]=a[x][y]; 34 dfs(x,y,k-1); 35 dfs(x+(int)pow(2,k-1),y,k-1); 36 dfs(x,y+(int)pow(2,k-1),k-1); 37 dfs(x+(int)pow(2,k-1),y+(int)pow(2,k-1),k-1); 38 } 39 40 int main() 41 { 42 int k; 43 a[1][1]=1; 44 dfs(1,1,10); 45 while(cin>>k) 46 { 47 for(int i=1;i<=pow(2,k);i++) 48 { 49 for(int j=1;j<=pow(2,k);j++) 50 { 51 printf("%-4d",a[i][j]); 52 } 53 cout <<endl; 54 } 55 } 56 return 0; 57 }