链接:https://ac.nowcoder.com/acm/contest/11163/A
来源:牛客网

题目描述
给出6根棍子,能否在选出3根拼成一个三角形的同时剩下的3根也能组成一个三角形?
输入描述:
首先在一行中给出一个 t,1 \le t \le 10^3t,1≤t≤10
3
,代表测试数据的组数

接下来t行,每行给出6个数字代表棍子长度,棍子长度为正且小于10^910
9

输出描述:
在一行中输出 “Yes” or “No”
示例1
输入
复制
2
1 1 1 1 1 1
1 2 3 4 5 6
输出
复制
Yes
No
思想:
用算法库函数里的全排列函数,可以枚举每一种情况,然后对每一种情况进行判断,如果是就真,否则为假。

# include <iostream>
# include <algorithm>
using namespace std;
int p[6];
int f=0;
int fun(int a,int b,int c){
    if(a+b>c&&a+c>b&&b+c>a) return 1;
    return 0;
}
int main(){
    int n;
    cin>>n;
    while(n--){
        for(int i=0;i<6;i++){
            cin>>p[i];
        }
        sort(p,p+6);
        do{
            if(fun(p[0],p[1],p[2])&&fun(p[3],p[4],p[5])){
                f=1;
                break;
            }
        }while(next_permutation(p,p+6));
        if(f) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        f=0;
    }
    return 0;
}

总结:
自己想用dfs,可是不太会写,用for写结果过不了,而且很麻烦,也很容易出错,当遇到全排列的问题时,可以线下想用一下全排列函数是否可行,自己对着函数不是很理解,导致自己卡住了,所以遇到可用全排列时可优先想全排列函数。