P2383 狗哥玩木棒

题目背景

狗哥又趁着语文课干些无聊的事了...

题目描述

现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢?

输入输出格式

输入格式:

输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据。 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度。

输出格式:

对于每组测试数据,如果可以组成正方形输出“yes”,否则输出“no”。

输入输出样例

输入样例#1:

3
4 1 1 1 1
5 10 20 30 40 50
8 1 7 2 6 4 4 3 5

输出样例#1:

yes
no
yes

说明

狗哥快抓狂了

题目大意:t组测试 n个木棒 是否能拼成一个正方形

题解:

dfs.

a、因为木棒都要用完,所以木棒的长度和%4!=0 直接输出No

b、最长的木棒大于求出的正方形的边 输出no (sum/4)

代码:

洛谷上面一个代码很好...我加了b的判断

我写的略丑..=L=

搜索用完n个木棒。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int t,n,sum,flag,maxx,w[5],a[22];
void dfs(int q){
    if(q==n+1){flag=1;return;}
    if(flag)return;
    for(int i=1;i<=4;i++){
        if(w[i]>=a[q]){
            w[i]-=a[q];
            dfs(q+1);
            w[i]+=a[q];
        }
    }
}
int main(){
    scanf("%d",&t);
    while(t--){
        sum=0;flag=0;maxx=-0x7ffffff;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            sum+=a[i];maxx=max(maxx,a[i]);
        }
        if(sum%4){
            printf("no\n");
            continue;
        }
        if(maxx>sum/4){
            printf("no\n");
            continue;
        }
        for(int i=1;i<=4;i++)
        w[i]=sum/4;
        sort(a+1,a+n+1,greater<int>());
        dfs(1);
        if(flag)printf("yes\n");
        else printf("no\n");
    }
    return 0;
}

换个风格

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int t,n,a[22],flag,sum,maxx,vis[22];
void dfs(int l,int v){
    if(v==3&&l==sum){flag=1;return;}
    if(flag)return;
    if(l==sum)l=0,v+=1;
    for(int i=1;i<=n;i++){
        if(!vis[i]&&l+a[i]<=sum){
            vis[i]=1;
            dfs(l+a[i],v);
            vis[i]=0;
        }
    }
}
int main(){
    scanf("%d",&t);
    while(t--){
        flag=0;sum=0;maxx=-0x7ffff;
        scanf("%d",&n);
        maxx=-0x7ffffff;sum=0;
        for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum+=a[i];maxx=max(maxx,a[i]);}
        if(sum%4||maxx>sum/4){printf("no\n");continue;}
        sum/=4;
        sort(a+1,a+n+1,greater<int>());
        dfs(0,0);
        if(flag)printf("yes\n");
        else printf("no\n");
    }
    return 0;
}
时间: 2024-10-25 03:17:20

P2383 狗哥玩木棒的相关文章

洛谷 P2383 狗哥玩木棒

题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据. 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度. 输出格式: 对于每组测试数据,如果可以组成正方形输出“yes”,否则输出“no”. 输入输出样例 输入样例#1: 3 4 1 1 1 1 5 10

洛谷——P2383 狗哥玩木棒

https://www.luogu.org/problem/show?pid=2383 题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据. 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度. 输出格式: 对于每组测试数据,如果可以组成正方形输出“ye

轻松掌握Linux操作系统技术 [肖哥玩转Linux入门基础视频课程]

课程目标:让零基础学员轻松并熟练掌握Linux系统以及实机排错,对Linux技术初级使用得心应手.适合人群:大学生.零基础学员.Linux初学者.Linux爱好者.Linux系统管理员等.课程介绍:适用于Linux的新使用者,帮助初学者了解并掌握Linux基本知识,该课程包括系统安装.基本指令使用.文件系统结构及权限设置.Bash. shell scripts.vim编辑器使用.系统配置.进程管理.文件的查找.压缩及处理.Linux下文件系统深入讲解.网络客户端使用等. 更多内容详见:轻松掌握L

洛谷P2380 狗哥采矿

P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少.最北边有bloggium的收集站,最西边有 yeyenum 的收集站.现在要你在这些格子上面安装向北或者向西的传送带(每个格子只能装一种).问最多能采到多少矿? 输入输出格式 输入格式: 第一行包含两个整数n,m,( 1 ≤ n ≤ 500, 1 ≤ m ≤ 500).接下来n行m列,表示每个

【CSDN滔哥玩英雄联盟】顶级ADC必修课:解读下路常见问题

我并不是一个最出色的英雄联盟玩家,这款游戏的刚刚接触一年多的时间,也没有任何职业选手对我进行过指导.不过根据我这一年多的游戏经验,总结出了下路玩家的几个常见错误,有些错误是我经常看到别人犯的,有些是我自己曾经犯过的错误,无论如何,我把这些错误带到大家的面前,希望各位可以在游戏中注意自己的行为,对手犯错的话抓住机会惩罚它们. 1.选择错误的英雄对线 这是一个非常常见的错误,在游戏没有真正开始的时候就发生了.在下路,肯定是你方的双人组去对抗对方的双人组.你们的下路组合在面对对手的下路组合是否有效取决

luogu 题解 P2380 【狗哥采矿】

拿到dp题我们就要想如何推方程 “最北边有bloggium的收集站,最西边有 yeyenum 的收集站.现在要你在这些格子上面安装向北或者向西的传送带(每个格子只能装一种).” 这说明了什么,对于某一个点,是不是只能通过2种方式来获取这个点的值,一个是铺北的传送带,一个是铺西的传送带.然而,如果在这个点铺了传送带的话,说明整一行都会被铺,但由于后来的可以铺不同的传送带来获取该点的值,说明如果在这个点铺的话只会影响这个点的西边的点或北边的点. 综上所述,我们对于仍以一个点,需要考虑以什么形式来铺,

关于两道搜索的题目

T1: P2383 狗哥玩木棒 题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入格式 输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据. 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度. 输出格式 对于每组测试数据,如果可以组成正方形输出“yes”,否则输出“no”. 输入输出样例 输入 #1 3 4 1 1 1 1

搜索专题练习

T1:狗哥玩木棒 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 思路: 既然已经规定木棒全都用上,那么边长就已经定下,就是周长的四分之一 那么只要考虑剪枝和细节模拟就好了 同时,我们对木棒进行排序,保证木棒长度有序,短的木棒可以对长的进行填充,进行极大的优化 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using names

为什么阿法狗不敢挑战麻将?

最近阿法狗很火啊! 再新浪网看到一篇文章,为什么阿法狗不挑战麻将呢? 生活的每一秒,都会有奇妙的发现.今年,灰鸽分享给大家的,多数是你不知道.或者未曾关注的事情.什么李世石在和阿法狗下围棋,别装作你在看,你连天元在棋盘的哪里都不知道,你就在趁机复习终结者,装什么装. 今天我们分享的主题是:为什么阿法狗不敢挑战麻将? 此前已经有学者分析了阿法狗在陆战棋.飞行棋.斗兽棋.跳棋.象棋方面的优势,称"围棋是地球人的最后一个堡垒".支撑这一观点的是围棋的穷举变化数量,如果我没记错,应该是10的1