ZOJ 2734

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 从第一种开始搜索,搜索完毕后回溯,搜索下一个
 4 int n,m,count,sum,val[11],num[11];
 5 void DFS(int x)
 6 {
 7      int i;    
 8     if(sum == n)
 9     {
10        count++; 
11        return ;
12     }
13     if(sum > n || x > m)  
14         return ;  
15     for(i=1; i<=num[x]; i++)
16     {
17        sum += val[x];
18        DFS(x+1); 
19     }
20     for(i=1; i<=num[x]; i++) //回溯
21     {
22        sum -= val[x];
23     }   
24     DFS(x+1);//搜索下一个
25 }
26 
27 int main()
28 {
29     int i,k=0;
30      
31      while(scanf("%d%d",&n,&m) != EOF)
32      {
33         for(i=1; i<=m; i++)
34         {
35            scanf("%d%d",&val[i],&num[i]); 
36         } 
37         count = sum = 0; 
38         DFS(1); 
39         printf(k++ ? "\n%d\n" : "%d\n",count); //注意题目的输出限制
40      }     
41      return 0;
42 }     
43          

 

posted @ 2012-08-03 16:01  zhongya  阅读(240)  评论(0编辑  收藏  举报