NYOJ-1058 部分和问题

http://acm.nyist.net/JudgeOnline/problem.php?pid=1058

很简单的一道题,但是很久没有ac出来,看了别人的一下代码,发现就差一个变量的事儿,真是天壤之别啊。

程序17行 :原先 i 是从0开始的,提交后超时,变为从cur开始,顿时奇迹出现了。真是坑啊!!!

上代码:

 1 #include <stdio.h>
 2 int n,k;
 3 int a[25],flag[25];
 4 int sum;
 5 
 6 int DFS(int cur){///返回0 cur位置不可选 返回1 已找到答案
 7     if(sum > k)
 8         return 0;
 9     if(sum == k){
10         printf("YES
");
11         for(int j = 0; j < n; j++)
12             if(flag[j] == 1)
13                 printf("%d ",a[j]);
14         printf("
");
15         return 1;
16     }
17     for(int i = cur; i < n; i++){
18         if(flag[i] == 0){
19             flag[i] = 1;
20             sum += a[i];
21             int ok = DFS(i);
22             if(ok == 0){
23                 flag[i] = 0;
24                 sum -= a[i];
25             }
26             if(ok == 1)
27                 return 1;
28         }
29     }
30     return 0;
31 }
32 
33 int main(void){
34     while(scanf("%d%d",&n,&k) != EOF){
35         sum = 0; 
36         for(int i = 0; i < n; i++){
37             scanf("%d",&a[i]);
38             flag[i] = 0;
39         }
40         if(!DFS(0))
41             printf("NO
");
42     }
43 
44 }
原文地址:https://www.cnblogs.com/yfs123456/p/5574521.html