一道dfs题目
2016-04-03 13:22
225 查看
题意:给出一些长度的线段,不能把这些线段切开,平均分成四组。问是不是可能做到。
这道题很容易超时,优化方式有两个,一个就是对于第一条线段,默认把它放在第一组。第二个就是在枚举每一条边的线段组成时,都只要从上一条所选取得线段后面一条开始枚举即可。
这道题很容易超时,优化方式有两个,一个就是对于第一条线段,默认把它放在第一组。第二个就是在枚举每一条边的线段组成时,都只要从上一条所选取得线段后面一条开始枚举即可。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define N 100 using namespace std; int T, n, s, f, flag , a , b ; bool dfs(int d, int l, int t) { if (d > 4) return true; if (l == s/4) { b[0] = 0; if (dfs(d+1, 0, 1)) return true; return false; } for (int i = b[t-1]+1; i <= n; i++) if (flag[i] == 0) { flag[i] = 1; b[t] = i; if (dfs(d,l+a[i],t+1)) return true; flag[i] = 0; } return false; } int main() { scanf("%d", &T); while (T--) { scanf("%d", &n); s = 0; f = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); s += a[i]; } if (s % 4 != 0) f = 1; if (f == 0) { memset(flag, 0, sizeof(flag)); b[1] = 1; flag[1] = 1; if (dfs(1,a[1],2)) printf("yes\n"); else printf("no\n"); } else printf("no\n"); } return 0; }
相关文章推荐
- React中的Statics对象
- 用Free Pascal IDE编写第一个程序Pascal版的hello world
- Android Studio 运行找不到夜神模拟器
- HA高可用集群
- C# : 读取简单的XML文件
- java热加载技术hotswap
- Linux rpm 命令参数使用详解[介绍和应用]
- js--引用类型Array--1.Array的基础知识
- wordpress 移动客户端(安卓,ios)
- React 学习整理
- Codeforces 114A-Cifera(暴力)
- Linux内核分析——进程的描述和进程的创建
- lintcode-medium-Nuts & Bolts Problem
- 使用secureCRT连接VMware-Ubuntukylin虚拟机
- require.js的使用的坑!
- 包贝尔婚礼事件中,有哪些嘈可以吐?
- tar.xz文件压缩和解压
- html <a>标签属性总结
- 数据仓库和数据集市的区别
- MFC-WM_CTLCOLOR消息绘制控件颜色