【暴力搜索】[POJ 1011]Sticks
来源:互联网 发布:数控切割机编程代码 编辑:程序博客网 时间:2024/04/30 23:04
首先这道题目有两个非常重要的剪枝1、如果当前放的是木块的第一个那如果当前dfs不成立,那么直接返回false因为每一个木板必定属于一个块,当他放第一个的时候如果可以放其他的其实是已经固定了的了,如果当前不成立那么不存在队友可以和他一起站对。2、就是如果当前这个和前一次进行dfs的木板长度一样,就跳过。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 64;int n, sum, s[MAXN+10], Len, tot;bool vis[MAXN+10];bool dfs(int _len, int up, int count){ if(count == tot) return true; int tp=-10000000; for(int i=up; i<n; i++){ if(!vis[i]){ if(s[i] == tp) continue; tp = s[i]; vis[i] = true; if(_len + s[i] == Len){ if(dfs(0, 0, count+1)) return true; return vis[i] = false; } else if(_len + s[i] < Len){ if(dfs(_len+s[i], i+1, count)) return true; if(_len == 0) return vis[i] = false; } vis[i] = false; } } return false;}int main(){ while(~scanf("%d", &n) && n){ memset(vis, 0, sizeof vis); sum = 0; for(int i=0;i<n;i++){ scanf("%d", &s[i]); sum += s[i]; } sort(s, s+n); for(Len=s[n-1]; Len<=sum; Len++) if(sum % Len == 0){ tot = sum / Len; if(dfs(0, 0, 0)){ printf("%d\n", Len); break; } } } return 0;}
0 0
- 【暴力搜索】[POJ 1011]Sticks
- POJ-1011-Sticks(经典搜索)
- poj 1011 Sticks(搜索+剪枝)
- POJ 1011:Sticks 经典搜索
- Sticks POJ 1011 搜索题
- POJ 1011 STICKS 搜索 剪枝
- POJ 1011 Sticks(搜索+剪枝)
- POJ 1011-Sticks 简单搜索DFS
- poj 1011 sticks 搜索加剪枝
- 搜索+剪枝——POJ 1011 Sticks
- 搜索+剪枝——POJ 1011 Sticks
- POJ 1011 Sticks(搜索剪枝)
- poj 1011 Sticks 深度搜索+(剪枝)
- POJ 2362 square &&POJ 1011 Sticks 记忆化搜索 DFS
- 搜索 + 剪枝 --- POJ 1101 : Sticks
- POJ 1380 暴力搜索
- POJ 1054 暴力搜索
- POJ 1753 (暴力搜索)
- zoj1949
- WM_SETCURSOR
- Snail—UI学习之导航视图控制器UINavigationController(系统)
- bkxpfgdvzxmu
- C++虚函数(2) 虚函数剖析之虚函数表
- 【暴力搜索】[POJ 1011]Sticks
- lqkzsfhlafreultt
- 还原数据库出错
- php 判断字符串是否包含
- java学习笔记--Exception
- Android学习笔记【一】Android学习感言(包含学习见解、学习方法)
- Android笔记之四种方式实现计时器
- 表单元素input、button、submit、submit()、onsubmit()详解
- 统计难题