A Za, A Za, Fighting...

坚信:勤能补拙

PKU 2248 Addition Chains

问题:
http://acm.pku.edu.cn/JudgeOnline/problem?id=2248

思路:
第一个想法是BFS,不过习惯性地看discuss,发现大家用的都是DFS,于是还是用DFS+减枝
这道题目的关键减枝是: num[depth+1] = num[depth]+num[i], 0<=i<=depth,另外就是从大到小的搜索顺序

另一种解法是迭代加深搜索,第一次使用,貌似就是用DFS实现BFS,不过空间需求与时间需求是两者的折衷,其模板类似于:
 1 for(deep=11; deep++)
 2 
 3 {
 4 
 5 dfs(0);
 6 
 7 If(find = true)
 8 
 9 break;
10 
11 }

代码1:
 1 #define MAX_LEN 101
 2 #define INF 0x7FFFFFFF
 3 int num[MAX_LEN];
 4 int ans[MAX_LEN];
 5 int n, min;
 6 
 7 int
 8 dfs(int depth)
 9 {
10     int i, j;
11     if(depth+1 >= min)
12         return;
13     if(num[depth] == n) {
14         min = depth+1;
15         memcpy(ans, num, min*sizeof(int));
16         return;
17     }
18     for(i=depth; i>=0; i--
19         if(num[i]+num[depth]<=n) {
20             num[depth+1= num[i] + num[depth];
21             dfs(depth+1);
22         }
23 }
24 
25 int
26 main(int argc, char **argv)
27 {
28     int i;
29     while(scanf("%d"&n)!=EOF && n!=0) {
30         min = INF;
31         num[0= 1;
32         dfs(0);
33         for(i=0; i<min; i++)
34             printf("%d ", ans[i]);
35         printf("\n");
36     }
37     return 0;
38 }

代码2:
 1 #define MAX_LEN 101
 2 int num[MAX_LEN];
 3 int n, find, dplimit;
 4 
 5 void
 6 dfs(int depth)
 7 {
 8     int i, j;
 9     if(depth >= dplimit)
10         return;
11     if(num[depth] == n) {
12         if(!find) {
13             for(j=0; j<=depth; j++)
14                 printf("%d ", num[j]);
15             printf("\n");
16             find = 1;
17         }
18         return;
19     }
20     for(i=depth; i>=0; i--
21         if(num[i]+num[depth]<=n) {
22             num[depth+1= num[i] + num[depth];
23             dfs(depth+1);
24         }
25 }
26 
27 int
28 main(int argc, char **argv)
29 {
30     while(scanf("%d"&n)!=EOF && n!=0) {
31         find = 0;
32         num[0= 1;
33         for(dplimit=11; dplimit++) {
34             dfs(0);
35             if(find)
36                 break;
37         }
38     }
39 }

posted on 2010-08-05 13:49 simplyzhao 阅读(221) 评论(0)  编辑 收藏 引用 所属分类: B_搜索


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜