`
digiter
  • 浏览: 121696 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pku1011 Sticks

    博客分类:
  • ICPC
阅读更多
一直没想好怎么搜索,所以一直没写,最近看到一段细节写得非常好的代码,于是把这道题AC了,感觉这段搜索写得灰常强大,短而效率高
#include <cstdio>
#include <algorithm>
#include <functional>
using namespace std;

const int maxN = 64 + 5;
int n, stick[maxN], len, m;
bool used[maxN] = {false}, done;

void dfs(int k, int now, int cnt)
{
	if (cnt == m)
		done = true;
	else if (now == len)
		dfs(0, 0, cnt + 1);
	else {
		int pre = -1;
		for (int i = k; i < n; ++i)
			if (!used[i] && stick[i] != pre && now + stick[i] <= len)
			{
				used[i] = true;
				pre = stick[i];
				dfs(k + 1, now + stick[i], cnt);
				used[i] = false;
				if (k == 0 || done)
					return;
			}
	}
}

int main()
{
	while (scanf("%d", &n), n > 0)
	{
		int sum = 0;
		for (int i = 0; i < n; ++i)
		{
			scanf("%d", &stick[i]);
			sum += stick[i];
		}
		sort(stick, stick + n, greater<int>());
		done = false;
		for (len = stick[0]; len <= sum; ++len)
			if (sum % len == 0)
			{
				m = sum / len;
				dfs(0, 0, 0);
				if (done)
					break;
			}
		printf("%d\n", len);
	}
	return 0;
}


原代码的地址是
http://www.cnblogs.com/lotus3x/archive/2008/07/25/1251552.html
分享到:
评论

相关推荐

    POJ1011-Sticks

    【标题】"POJ1011 - Sticks" 是一个经典的计算机编程竞赛题目,源自北京大学的在线评测系统POJ(PKU Online Judge)。这个题目挑战程序员解决与几何图形和数学逻辑相关的问题。 【描述】该题目的核心是求解在二维...

    PKU POJ 1162 Building with Blocks解题报告

    与同类题目比较,如线性情况的1011 Sticks、二维情况的1020 Anniversary Cake以及需要坐标变换的1069 The Bermuda Triangle等,本题作为三维情况,其复杂度达到了顶峰。 #### 解题思路 解题的关键在于良好的搜索...

    pku题目分类.doc

    这份"Pku题目分类.doc"文件提供了北京大学(Peking University, PKU)编程竞赛中的一些题目分类,涵盖了许多不同的算法和问题类型。以下是对这些标签和题目类型的详细解释: 1. **送分题**:这类题目通常相对简单,...

    PKU 的一些搜索题目

    #### POJ 1011: sticks 此题描述为“sticks”,可能是一个经典的棒子问题,可以通过广度优先搜索来解决。题目要求找到将一定数量的棍子排列成特定形状的方法。这个问题的关键在于如何有效地遍历所有可能的排列组合...

    ucm.zip_数值算法/人工智能

    【标题】"ucm.zip_数值算法/人工智能" 涉及的是在编程竞赛中的一道题目,PKU第1011题的源代码,该题目与数值算法和人工智能有关。这通常意味着我们需要解决一个需要用到数值计算或者智能优化方法的问题。 【描述】...

    算法解析ACM

    **案例分析:Pku1011—Sticks** 题目描述:给定一系列木棍的长度,需要将它们分成若干组,使得每组中的木棍可以组成一个三角形。此类问题可以通过状态空间搜索来解决,通过构建一个状态空间来表示所有可能的分组...

    北大POJ题目分类,归纳等等的呢个

    8. **搜索与回溯**:如1011 Sticks(棍子问题)、1012 Joseph(约瑟夫问题)等,需要运用深度优先搜索或广度优先搜索等方法。 9. **模拟题**:如1099 Square Ice(正方形冰块)、1115 Statistical Trouble(统计...

    专题资料-HOT\树\树结构及其应用

    2. **PKU2452 Sticks Problem**:给定一系列长度不等的棍子,要求找出最长的一对棍子,使得它们之间存在一个中间棍子满足特定条件。这类问题可以通过构建辅助数据结构,如使用**平衡树**来实现快速查询和更新操作,...

Global site tag (gtag.js) - Google Analytics