HDOJ5311 深搜简单题,几个小的剪枝

Hidden String

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 2018    Accepted Submission(s): 766


Problem Description
Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a string  s of length  n. He wants to find three nonoverlapping substrings  s[l1..r1] s[l2..r2] s[l3..r3] that:

1.  1l1r1<l2r2<l3r3n

2. The concatenation of  s[l1..r1] s[l2..r2] s[l3..r3] is "anniversary".
 

Input
There are multiple test cases. The first line of input contains an integer  T  (1T100), indicating the number of test cases. For each test case:

There's a line containing a string  s  (1|s|100) consisting of lowercase English letters.
 

Output
For each test case, output "YES" (without the quotes) if Soda can find such thress substrings, otherwise output "NO" (without the quotes).
 

Sample Input
 
   
2 annivddfdersewwefary nniversarya
 

Sample Output
 
   
YES NO
 

Source
BestCoder 1st Anniversary ($)
 

Recommend
hujie   |   We have carefully selected several similar problems for you:   6107  6106  6105  6104  6103 


代码如下:
#include 
#include 
#include 
#include 
using namespace std;

string s,word="anniversary";
bool flag;
int lens,lenw;

void dfs(int num, int index,int word_index){
   if (flag) return;
   if (num<=3 && word_index>=lenw) { 
      flag=1;
      return;
   }
   if (index>=lens) return;
   if (word_index>=lenw) return;
   if (num>3) return;

   int i=index;
   int k=word_index;
   while (i>t;
    while (t--){
        cin>>s;
        flag=0;
        lens=s.length();
        dfs(0,0,0);
        if (flag) cout<<"YES"<


你可能感兴趣的:(深搜)