分治——循环日程表

今天领略到分治思想的妙处,当大的问题可以通过缩减规模成为相同性质的小问题是,当数据足够小,那么也就解决了这个问题

 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 }

 

posted @ 2019-03-18 14:48  Chuhanjing  阅读(127)  评论(0编辑  收藏  举报