3 条题解

  • 1
    @ 2025-7-24 10:41:33
    #include<bits/stdc++.h>
    #define int long long
    #define b bool
    using namespace std;
    const int N = 11;
    const int inf = 0x3f3f3f3f;
    int a[N];
    bool hqt[N];
    int sum;
    int n;
    int ans;
    bool dfs(int s , int ans){
    	if(s > sum){
    		return false;
    	}
    	
    	if(sum == s){
    		ans ++;
    		if(ans == 3){	
    			return true;
    		}
    		s = 0;
    	}
    	for(int i = 1 ; i <= n ; i ++){
    		if(hqt[i]){
    			continue;
    		}
    		hqt[i] = true;
    		if(dfs(s + a[i] , ans)){
    			return true;
    		}
    		hqt[i] = false;
    	}
    	return false;
    }
    signed main(){
    	freopen("triangle.in" , "r" , stdin);
    	freopen("triangle.out" , "w" , stdout);
    	cin >> n;
    	for(int i = 1 ; i <= n ; i ++){
    		cin >> a[i];
    		sum += a[i];
    	}
    	if(sum % 3 != 0){
    		cout << "no";
    		return 0;
    	}else{
    		sum /= 3;
    	}
    	if(dfs(0 , 0)){
    		cout << "yes";
    	}else{
    		cout << "no";
    	}
    	return 0;
    }
    
    
    
    • 0
      @ 2026-8-13 16:37:12
      using namespace std;
      const int N=1e4+10;
      int a[N],sum=0,n;
      bool vis[N];
      bool dfs(int cnt,int ans){
      if(cnt>sum){
      return false;
      }
      if(cnt==sum){
      ans++;
      if(ans==3){
      return true;
      }
      cnt=0;
      }
      for(int i=1;i<=n;i++){
      if(vis[i]){
      continue;
      }
      vis[i]=true;
      if(dfs(cnt+a[i],ans)){
      return true;
      }
      
      vis[i]=false;
      }
      return false;
      
      
      }
      int main (){
      freopen("triangle.in", "r", stdin);
      freopen("triangle.out", "w", stdout);
      cin>>n;
      for(int i=1;i<=n;i++){
      cin>>a[i];
      sum+=a[i];
      }
      if(sum%3!=0){
      cout<<"no";
      return 0;
      }
      sum/=3;
      if(dfs(0,0)){
      cout<<"yes";
      }else{
      cout<<"no";
      }
      return 0;
      }
      
      • 0
        @ 2025-7-23 19:54:58

        ask一下,陈宇思的题解为什么没有头文件????
        思路:
        首先特判一下棍子长度能不能被3整除 如果不行,就输出no
        首先使用dfs计算三条边的长度,枚举每根木棍加在l1,l2,l3三条边上不同的情况,若dfs中满足三边都等于sum/3,那就输出yes,否则输出no。

        剪枝:如果dfs过程中有某条边大于s/3就回溯,然后枚举到第n根木棍如果还没找到等边三角形,就退出函数。


        • 1

        信息

        ID
        548
        时间
        2000ms
        内存
        256MiB
        难度
        9
        标签
        (无)
        递交数
        508
        已通过
        32
        上传者