zoukankan      html  css  js  c++  java
  • Square(强大的剪枝)

    http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2410

    /*
    题意;
    给出一定数量的棍子用这些棍子组成一个正方形
    要求把这些棍子全部用完
    能组成正方形输出yes否则输出no

    分析;

    正方形的边长都相同
    即是找出四条边长一样的边

    第一 : 周长必须是4的倍数
    第二 : 最长的木棍必须小于等于边长
    第三:木棍重大到小排序 找边是从大向小的开始找,不必每次都从头找一遍

    */

    include<stdio.h>

    include<string.h>

    include

    using namespace std;
    int stick[25];
    int vis[25];
    int op=0,bianZhang ;
    int m;
    bool myCmp(int a,int b)
    {
    return a>b;
    }
    void dfs(int cur,int sum,int start)
    {
    if(cur3)
    {
    op=1;
    return ;
    }
    if(op)return ;
    for(int i=start; i<m; i++)
    {
    if(vis[i]
    1)continue;
    if(sum+stick[i]==bianZhang)
    {
    if(op)return;//如果没有 超时
    vis[i]=1;
    dfs(cur+1,0,0);//找到一条边 准备找下一条
    vis[i]=0;
    }
    else if(sum+stick[i]<bianZhang)//还没有组成一条边
    {
    if(op)return;//如果没有 超时
    vis[i]=1;
    dfs(cur,sum+stick[i],i);
    vis[i]=0;
    }
    }
    return ;
    }
    int main()
    {
    int n;
    scanf("%d",&n);
    while(n--)
    {
    scanf("%d",&m);
    memset(stick,0,sizeof(stick));
    memset(vis,0,sizeof(vis));
    op=0;
    int sum=0;
    for(int i=0; i<m; i++)
    {
    scanf("%d",&stick[i]);
    sum+=stick[i];
    }
    if(sum%4!=0||m<4)
    {
    printf("no ");
    continue;
    }
    sort(stick,stick+m,myCmp);
    bianZhang=sum/4;
    if(stick[0]>bianZhang)
    {
    printf("no ");
    continue;
    }
    dfs(0,0,0);
    if(op )
    printf("yes ");
    else
    printf("no ");
    }
    return 0;
    }

    梦里不知身是客,一晌贪欢。
  • 相关阅读:
    Vue 项目目录结构分析
    Vue 项目环境搭建
    Vue 组件
    Vue 指令
    Vue 实例成员
    Django 静态文件
    MySQL 索引详解
    Django 请求生命周期
    18. 4Sum (JAVA)
    16. 3Sum Closest (JAVA)
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/5320441.html
Copyright © 2011-2022 走看看