of Course,i can! Sorry,i can ' t!
Two methods:
The first kind of direct backtracking DFS
1 #pragmaComment (linker, "/stack:1024000000,1024000000")2#include <iostream>3#include <cstdio>4#include <cstring>5#include <cmath>6#include <math.h>7#include <algorithm>8#include <queue>9#include <Set>Ten#include <bitset> One#include <map> A#include <vector> -#include <stdlib.h> -#include <stack> the using namespacestd; - #definePI ACOs (-1.0) - #defineMax (a) (a) > (b)? (a): (b) - #defineMin (a) (a) < (b)? (a): (b) + #definell Long Long - #defineEPS 1e-10 + #defineMOD 1000000007 A #defineN 26 at #defineINF 1e12 - intN,m,flag; - intA[n]; - intVis[n]; - voidDfsintNowintnum) { - if(num>=m) { in if(num==L) { -flag=1; to } + return; - } the for(inti=now;i<n;i++){ * if(!Vis[i]) { $vis[i]=1;Panax NotoginsengDFS (i+1, num+a[i]); - if(flag) { the return; + } Avis[i]=0; the } + } - } $ intMain () $ { - while(SCANF ("%d", &n) = =1){ - for(intI=0; i<n;i++){ thescanf"%d",&a[i]); - }Wuyiscanf"%d",&m); thememset (Vis,0,sizeof(Vis)); -flag=0; WuDfs0,0); - if(flag) { Aboutprintf"of Course,i can!\n"); $}Else{ -printf"sorry,i can ' t!\n"); - } - } A return 0; +}
View Code
The second type of DFS like 01 backpack thought
1 #pragmaComment (linker, "/stack:1024000000,1024000000")2#include <iostream>3#include <cstdio>4#include <cstring>5#include <cmath>6#include <math.h>7#include <algorithm>8#include <queue>9#include <Set>Ten#include <bitset> One#include <map> A#include <vector> -#include <stdlib.h> -#include <stack> the using namespacestd; - #definePI ACOs (-1.0) - #defineMax (a) (a) > (b)? (a): (b) - #defineMin (a) (a) < (b)? (a): (b) + #definell Long Long - #defineEPS 1e-10 + #defineMOD 1000000007 A #defineN 26 at #defineINF 1e12 - intn,m; - intA[n]; - BOOLDfsintCurintnum) { - if(num>=m) { - if(num==L) { in return true; - } to return false; + } - if(cur>=n)return false; the if(Dfs (cur+1, Num+a[cur]))return true; * returnDFS (cur+1, num); $ Panax Notoginseng } - intMain () the { + while(SCANF ("%d", &n) = =1){ A for(intI=0; i<n;i++){ thescanf"%d",&a[i]); + } -scanf"%d",&m); $ if(Dfs (0,0)){ $printf"of Course,i can!\n"); -}Else{ -printf"sorry,i can ' t!\n"); the } - }Wuyi return 0; the}
View Code