#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int len[20],sum,M;
bool flag,f[20];//flag标记是否找到
void dfs(int d,int stick,int nowlen)
{
    //i:正在处理的小棍,stick:已经拼好的边框数,nowlen:当前正在拼的框的长度
    int j;
    if(flag||stick>2)
	{
        if(stick>2)
			flag=1;//已经拼好3个框,第四个不用拼了
        return ;
    }
    else
	{
        for(j=d;j<M;j++)
		{
            if((!f[j])&&nowlen+len[j]<=sum)
			{
                f[j]=1;//标记
                if(nowlen+len[j]==sum)
					dfs(0,stick+1,0);//拼好了一个,继续拼下一个
                else
					dfs(j+1,stick,nowlen+len[j]);//继续拼当前的
                f[j]=0;//恢复标记
            }
        }
    }
}
int main()
{
    int ca,i,j;
    scanf("%d",&ca);
    while(ca--)
	{
        scanf("%d",&M);
        for(i=sum=0;i<M;i++)
		{
            scanf("%d",&len[i]);
            sum+=len[i];
        }
        if(sum%4!=0)
		{
			printf("no\n");
			continue;
		}
        sum/=4;
        for(int i=0;i<M;i++)
			for(int j=i+1;j<M;j++)
			{
				if(len[i]<len[j])
				{
					int t=len[i];
					len[i]=len[j];
					len[j]=t;
				}
			}
        if(len[0]>sum)
		{
			printf("no\n");
			continue;
		}
        flag=0;
        dfs(0,0,0);
        printf("%s\n",flag?"yes":"no");
    }
    //system("pause");
    return 0;
}

  

Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square?

The first line of input contains N, the number of test cases.  Each test case begins with an integer 4 ≤ M ≤ 20, the number of sticks.  M integers follow; each gives the length of a stick - an integer between 1 and 10,000.

For each case, output a line containing "yes" if is is possible to form a square; otherwise output "no".

Sample Input

3
#include <stdio.h>
int a[20];
int sum=0;
int b[20]={0};
int n;
int flag=0;
void fun(int step,int num,int toile)
{
	if(num>2)
	{
		flag=1;
	}

	for(int i=step;i<n;i++)
	{
		if((!b[i])&&(toile+a[i]<=sum))
		{
			b[i]=1;
			if(toile+a[i]==sum)
			{
				fun(0,num+1,0);
			}
			else
			{
				fun(i+1,num,toile+a[i]);
			}

			b[i]=0;

		}
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		sum=sum+a[i];
	}

	if(sum%4==0)
	{
		sum=sum/4;
		fun(0,0,0);
	}

	else
	{
		printf("NO");
	}
	if(flag==1)
		printf("YES");
	return 1;
}
#include <stdio.h> int a[20]; int sum=0; int b[20]={0}; int n; int flag=0; void fun(int step,int num,int toile) { if(num>2) { flag=1; } for(int i=step;i<n;i++) { if((!b[i])&&(toile+a[i]<=sum)) { b[i]=1; if(toile+a[i]==sum) { fun(0,num+1,0); } else { fun(i+1,num,toile+a[i]); } b[i]=0; } } } int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); sum=sum+a[i]; } //先排序 for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) { if(a[i]>a[j]) { int t=a[i]; a[i]=a[j]; a[j]=t; } } if(sum%4==0) { sum=sum/4; fun(0,0,0); } else { printf("NO"); } if(flag==1) printf("YES"); return 1; }
4 1 1 1 1 5 10 20 30 40 50 8 1 7 2 6 4 4 3 5

Output for Sample Input

yes
no
yes

TOJ1398正方形的编成 或者 POJ2362的更多相关文章

  1. poj2362 Square(DFS)

    题目链接 http://poj.org/problem?id=2362 题意 输入n根棍子的长度,求这n根棍子是否能组成一个正方形. 思路 假设能组成正方形,则正方形的周长为sum,sum/4为正方形 ...

  2. [LeetCode] Matchsticks to Square 火柴棍组成正方形

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  3. [LeetCode] Maximal Square 最大正方形

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  4. 【纯css】左图右文列表,左图外框宽度占一定百分比的正方形,右上下固定,右中自动响应高度。支持不规则图片。

    查看演示 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  5. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

  6. 洛谷 P1387 最大正方形 Label:奇怪的解法

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  7. H5一行显示两个正方形

    1)有时候一些图片会是正方形或者长方形,对于这样的图片一般都是居中显示到正方体内,代码如下:  .exhibition_list img{width:100%;position: relative;t ...

  8. 求解最大正方形面积 — leetcode 221. Maximal Square

    本来也想像园友一样,写一篇总结告别 2015,或者说告别即将过去的羊年,但是过去一年发生的事情,实在是出乎平常人的想象,也不具有代表性,于是计划在今年 6 月份写一篇 "半年总结" ...

  9. for 循环 正方形

    <?php//================================正方形//for($q = 1; $q <= 5; $q ++ ){//    for($z =1; $z & ...

随机推荐

  1. Python实践练习:选择性拷贝

    题目 项目要求:编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg),不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中. 代码 import os import sh ...

  2. PL/SQL Developer Initialization erro

    PL/SQL Developer---------------------------Initialization errorSQL*Net not properly installed Oracle ...

  3. delphi使用 DockForm DesignEditors F2613 Unit 'DockForm' not found

    DockForm [dcc32 Fatal Error] ToolsAPI.pas(18): F2613 Unit 'DockForm' not found. 这样解决了XE7. http://doc ...

  4. Android 包信息工具类

    /** AndroidInfoUtils:安卓游戏包信息工具类**/ 1 public class AndroidInfoUtils { @SuppressWarnings("uncheck ...

  5. 【Git】四、Git工作

    一.Git创建仓库 版本库:代码仓库(repository),可以理解为一个项目的目录,在这个项目的目录中Git对每个文件进行管理,记录每个文件的增删改查记录,并能够追踪历史,在需要的时候可以回退到某 ...

  6. MYSQL TIMESTAMP with implicit DEFAULT value is deprecated.

    TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp se ...

  7. react native 导航路由组件react-navigation的使用

    navigation的几个难点和问题: 1.底部tab是否可以加上中间的大按钮? 如果加上,如何触发事件? js文件放哪? 2.navigation的登录注册页面.成功后应该不能返回刚刚的登录页面?清 ...

  8. IDEA00 IDEA知识点汇总

    一.从头搭建IDEA开发环境 https://mp.weixin.qq.com/s/6jXHzkU8JfubhDsQJbwl8Q 1 下载最新版IDEA 1.1 官网下载安装 1.2 专业版激活 2 ...

  9. sqlserver 必须声明标量变量 "***"。

    发现在navicat premium上执行报这个异常,在sqlserver上不报,想到我之前的文章用存储过程时mysql里有个分割符,去掉“:”果然执行成功. DECLARE @countlmc IN ...

  10. Efficient algorithms for polyploid haplotype phasing 多倍体单体型分型的有效算法

    背景:单倍型的推断,或沿着相同染色体的等位基因序列,是遗传学中的基本问题,并且是许多分析的关键组分,包括混合物图谱,通过下降和插补识别身份区域. 基于测序读数的单倍型定相引起了很多关注. 已经广泛研究 ...