Newcoder 13 B.贝伦卡斯泰露(dfs)dfs剪枝技巧

    技术2022-07-10  141

    传送门

    #include<iostream> using namespace std; int a[41],b[41],c[41],t,n; bool dfs(int i,int j,int id){//i,j分别表示b[],c[]中元素个数,id表示当前匹配元素下标 if(i>n/2||j>n/2) return 0;//结束条件 if(id>n) return 1;//结束条件 if(a[id]==b[j+1]){ //第一种情况加入到c[] c[j+1]=a[id]; if(dfs(i,j+1,id+1)) return 1;//继续递归下一个 } b[i+1]=a[id];//即使相等也加入b[]或者不相等加入到b[] return dfs(i+1,j,id+1);//递归 } int main(){ cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; b[1]=a[1]; puts(dfs(1,0,2)?"Frederica Bernkastel":"Furude Rika"); } return 0; }
    Processed: 0.016, SQL: 9