木棒

木棒_第1张图片
木棒_第2张图片
直接先排序然后枚举三角形的边值,用两边之和大于第三边,两边之差小于第三边来判断,可以带dfs优化

#include
using namespace std;
int T,n=12;
long long ans,l[15];
bool vis[15];
inline long long read()
{
    long long k=0,f=1;
 char ch=getchar();
    while(ch<'0'||ch>'9') 
 {
  if(ch=='-') 
   f=-f;
  ch=getchar();
 }
    while(ch>='0'&&ch<='9') 
  k=(k<<3)+(k<<1)+ch-'0',ch=getchar();
    return k*f;
}
void dfs(int ret)
{
 if(ret>ans) 
  ans=ret;
 if(ans==4) 
  return;
 for(int i=1;i<=n;i++) 
 {
  if(!vis[i])
  {
   for(int j=i+1;j<=n;j++) 
   {
    if(!vis[j])
    {
     for(int k=j+1;k<=n;k++) 
     {
      if(!vis[k])
      {
       if(l[i]+l[j]>l[k])
       {
        vis[i]=vis[j]=vis[k]=true;
        dfs(ret+1);
        vis[i]=vis[j]=vis[k]=false;
       }
      }
     }
    }
   }
  }
 }
}
int main(){
    scanf("%d",&T);
    while(T--)
 {
     for(int i=1;i<=n;i++) 
   l[i]=read();
     sort(l+1,l+n+1);
  ans=0;
     dfs(0);
     printf("%lld\n",ans);
 }
 return 0;
}

你可能感兴趣的:(zr)