luogu P2383 狗哥玩木棒
来源:互联网 发布:python def peven (n) 编辑:程序博客网 时间:2024/05/22 14:53
题目背景
狗哥又趁着语文课干些无聊的事了…
题目描述
现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢?
输入格式:
输入文件中的第一行是一个整数n表示测试的组数,接下来n行表示每组的测试数据。 每行的第一个数为m(4<=m<=20),接下来m个数ai(1<=ai<=1000)表示木棒的长度。
输出格式:
对于每组测试数据,如果可以组成正方形输出“yes”,否则输出“no”。
说明
狗哥快抓狂了
普通搜索+略微剪枝
#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <algorithm>using namespace std;int n,t,sum,f,cnt;//木棍数,询问次数,总长度,标记是否达成条件,当前边的长度int len[25],che[25];//长度数组,标记是否被用过void dfs(int e,int num,int cnt){//dfs if(num==4){//如果达成就标记f=1并输出 f=1; cout<<"yes"<<endl; return; } for(int i=1;i<=n;i++){//遍历每条木棍 if(!che[i]&&cnt+len[i]<=e){//如果未用过且不超出目标边长 che[i]=1;//标记为用过 if(cnt+len[i]==e) dfs(e,num+1,0);//如果当前边长正好达成,搜下一边,边长贵0 else dfs(e,num,cnt+len[i]);//继续搜此边 che[i]=0;//还原 if(f==1) return;//玄学退出函数,加速 } } return;}int main(){ memset(len,0,sizeof(len)); memset(che,0,sizeof(che)); cin>>t;//读入询问次数 while(t--){ cin>>n;//当前询问的木棍数 for(int i=1;i<=n;i++){ cin>>len[i];//读入长度 sum+=len[i];//求木棍总长 } sort(len+1,len+n+1);//排序 if(len[n]>sum/4||sum%4!=0){//剪枝,如果最长边已超过目标边长||总长度不能被4整除就不必再搜 cout<<"no"<<endl; sum=0; memset(len,0,sizeof(len));//清空是个好习惯 continue; } dfs(sum/4,0,0);//目标边长,边数,当前边长度 if(!f) cout<<"no"<<endl;//无法达成 f=0; sum=0;//清空 memset(len,0,sizeof(len)); } return 0;}
ps1:写代码一定要认真,不然会两个小时一道水题
ps2:题目名字取得很好(逃
阅读全文
0 0
- luogu P2383 狗哥玩木棒
- 洛谷 P2383 狗哥玩木棒
- 木棒
- 木棒
- 木棒
- 木棒
- 木棒问题
- 木棒三角形
- poj_1011木棒
- poj1011木棒
- poj 木棒
- 木棒三角形
- 【poj1011】木棒
- POJ1011 木棒
- POJ1011 木棒
- 凑木棒
- POJ1011 木棒
- 木棒拼图
- 如何有效报告 bug
- Unity 一些注意的东西
- 本地计算机上的XXX服务启动后停止。某些服务在未由其它服务或程序使用时将自动停止
- SpringBoot学习Demo
- 从IT定律到计算机
- luogu P2383 狗哥玩木棒
- Java高并发,如何解决,什么方式解决
- 【Python基础】1.1.2 多文件合并操作
- 删除数组第一个元素
- LCA(最近公共祖先 Tarjan) CodeVs-2370-小机房的树
- Linux
- elasticsearch 集群环境搭建
- 三栏布局的5种解决方案及优缺点
- 使用Angular官方Demo时,下拉菜单没有数据