标签:
Sequence one
1 #include<iostream> 2 #include<set> 3 #include<cstring> 4 #define LL long long 5 using namespace std; 6 7 const int maxn=1010; 8 LL a[maxn]; 9 LL ans[10000]; 10 int n,p,len; 11 bool flag; 12 13 set<LL>ssss; 14 set<LL>::iterator it; 15 16 void dfs(int cur,int cnt) 17 { 18 if(cnt>len) 19 return ; 20 ans[cnt]=a[cur]; 21 if(cnt==len) 22 { 23 for(int i=1;i<cnt;i++) 24 cout<<ans[i]<<" "; 25 cout<<ans[cnt]<<endl; 26 flag=true; 27 p--; 28 return ; 29 } 30 //开始这个set是写在了函数外面,然后一直wa 31 //写在外面,dfs操作的其实一直是同一个s,前面的可能也会被clear() 32 set<LL>s; 33 s.clear(); 34 for(int i=cur+1;i<=n;i++) 35 { 36 if(a[i]>=a[cur]&&p>0) 37 { 38 it=s.find(a[i]); 39 if(it!=s.end()) 40 continue; 41 dfs(i,cnt+1); 42 s.insert(a[i]); 43 } 44 } 45 } 46 47 int main() 48 { 49 while(cin>>n>>p) 50 { 51 for(int i=1;i<=n;i++) 52 cin>>a[i]; 53 int m=0; 54 ssss.clear(); 55 for(int i=1;i<=n;i++) 56 { 57 it=ssss.find(a[i]); 58 if(it!=ssss.end()) 59 continue; 60 cout<<a[i]<<endl; 61 ssss.insert(a[i]); 62 m++; 63 if(m>=p) 64 break; 65 } 66 p-=m; 67 len=2; 68 ssss.clear(); 69 while(p>0&&len<=n) 70 { 71 flag=false; 72 ssss.clear(); 73 for(int i=1;i<=(n-len+1);i++) 74 { 75 it=ssss.find(a[i]); 76 if(it!=ssss.end()) 77 continue; 78 dfs(i,1); 79 ssss.insert(a[i]); 80 } 81 if(!flag) 82 break; 83 len++; 84 } 85 cout<<endl; 86 } 87 return 0; 88 }
HDU2610 Sequence one DFS 简单题 好题
标签:
原文地址:http://www.cnblogs.com/-maybe/p/4422922.html