从昨天晚上写到现在,一直在TLE,现在终于剪枝完成了_(:зゝ∠)_

【思路】

深搜:用这类型组合题目最基本的深搜,变量side记录当成已经组成了几条变,sl表示当前在组合的边已经有的长度。如果当前stick的长度与已有长度的和恰巧等于边长,则side+1,将sl清零;否则若小于边长,则sl+当前长度继续搜索,直到组成所有边为止。

剪枝:(1)如果木棒数目没有到达四根,则为no

     (2)比较容易想到的一点,如果当前木棒总长不是4的整数倍,则为no

   (3)由于木棒不能这段,如果最长的木棒大于边长,则为no

   (4)由于越短的木棒灵活性越高,进行快排之后由大至小进行搜索。

   (5)为了避免重复搜索,我们默认组成同一边时,下一根取的木棒长度必定不大于当前根的木棒。故设置变量frm,即当前可取木棒长度的范围。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=+;
int stick[MAXN];
int n,sum,m;
bool visited[MAXN]; bool dfs(int frm,int side,int sl)
{
if (==side) return(true);
for (int i=frm;i>=;i--)
if (!visited[i])
{
visited[i]=true;
if (stick[i]+sl<sum)
{
if (dfs(i-,side,sl+stick[i])) return true;
}
else
if (stick[i]+sl==sum)
{
if (dfs(m-,side+,)) return true;
}
visited[i]=false;
}
return false;
} int main()
{
scanf("%d",&n);
for (int kase=;kase<n;kase++)
{
memset(visited,false,sizeof(visited));
scanf("%d",&m);
sum=;
int max=-;
for (int i=;i<m;i++)
{
scanf("%d",&stick[i]);
sum+=stick[i];
if (stick[i]>max) max=stick[i];
}
if (sum%!=||m<||max>sum/) cout<<"no"<<endl;
else
{
sort(stick,stick+m);
sum=sum/;
if (dfs(m-,,)) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
}
return ;
}

最新文章

  1. springboot(八):RabbitMQ详解
  2. Nessus的安装(Linux)
  3. Yii 1开发日记 -- 搜索功能及Checkbox的实现
  4. 丢手帕问题即约瑟夫问题的PHP解法
  5. Android进程整理
  6. xml格式的数据转化成数组
  7. System.DateUtils 3. IsPM、IsAM 判断是否为上、下午
  8. 1、win32创建窗口函数(windows程序内部运行机制)
  9. isAnimated函数
  10. linux脚本随笔-01
  11. Rudolph javascript 监听简单对象属性的变化 -- 回调函数的应用
  12. BI案例:某公司BI系统的九大主题分析
  13. iOS访问通讯录开发-读取联系人信息
  14. 有趣的checkbox动画切换状态(支付宝转账成功显示)--第三方开源--AnimCheckBox
  15. Oracle Enterprise Linux 64-bit下安装apache-tomcat-7.0.53步骤
  16. 为什么 UDP 有时比 TCP 更有优势
  17. Android AES加密算法及事实上现
  18. 高性能Server---Reactor模型【转载】
  19. SQLI DUMB SERIES-13
  20. note 6 函数

热门文章

  1. 使用SQL Server连接xml接口,读取并解析数据
  2. 设计模式之Builder
  3. defconfig file 的 位置
  4. 安全测试===burpsuit指南
  5. 如何在阿里云esc上安装wordpress
  6. yum安装的Apache的各种配置文件的位置
  7. Assistor PS 切图工具的使用说明。
  8. 利用BeanUtils工具类封装表单数据
  9. windows7配置python和django的开发环境
  10. django celery异步框架