没啥子好说的,菜鸡一个,dfs
#include<iostream> using namespace std; int n,t; int arr[44],a[44],b[44];//首先,做题先看内存,爆了。。。三个数组,存最初数据和两个子数据 int dfs(int aa,int bb,int ar)//三个指针, { if(aa>t/2||bb>t/2) return 0; if(ar>t) return 1;//dfs先写跳出递归条件 if(arr[ar]==a[bb+1]) { b[bb+1]=arr[ar]; if(dfs(aa,bb+1,ar+1)) { //然后就是注意回溯,aabb啥的最开始用的++,然后回溯不方便 return 1; } } a[aa+1]=arr[ar]; //自己体会吧,我参考大佬的代码,然后虽然能过一部分,但在百分之80卡了好久,最后比较迷茫的过了 return dfs(aa+1,bb,ar+1); } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; for(int i=0;i<n;i++) { cin>>t; for(int k=1;k<=t;k++) { cin>>arr[k]; } a[1]=arr[1]; if(dfs(1,0,2)) cout<<"Frederica Bernkastel"<<endl; else cout<<"Furude Rika"<<endl; } return 0; }