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 }