您的位置:首页 > 其它

这是一个例子[osily]

2009-07-07 20:43 190 查看
选择这个blog主要是因为有代码加亮功能,我感觉这个功能很重要,还有几个我正在注册中,有的要一些时间,到时候再对比一下选个好用的。

这个blog三个人一起用,先说几个问题。

写东西时题目后加一下自己的名,网名或代号,我的就是 osily,用中括号括上。对他人的文章有权利修改,如果有错误等问题的话,如果是比较严重的问题,要注明自己的身份,其他问题可以在留言给出,也要注一下身份。

以后有什么再补充。

这是代码示例:

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int sticks[64], n, len, num;
bool used[64];
bool compare(const int &a, const int &b)
{
return a > b;
}
bool dfs(int cur, int left, int level)
{				//cur: 当前已经计算的木棒编号,left:该段还剩的长度,level:已经成功的木棒数
if (left == 0)
{			//匹配一根木棒成功
if (level == num - 2)
return true;
for (cur = 0; used[cur]; cur++);
used[cur] = true;
if (dfs(cur + 1, len - sticks[cur], level + 1))
return true;
used[cur] = false;
return false;
}
else
{
if (cur >= n - 1)
return false;
for (int i = cur; i < n; i++)
{
if (used[i])
continue;
if ((sticks[i] == sticks[i - 1]) && !used[i - 1])
continue;
if (sticks[i] > left)
continue;
used[i] = true;
if (dfs(i, left - sticks[i], level))
return true;
used[i] = false;
}
return false;
}
}
int main()
{
while (scanf("%d", &n) !=EOF)
{
if (n == 0)
break;
int sum = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &sticks[i]);
sum += sticks[i];
}
sort(sticks, sticks + n, compare);
bool end = false;
for (len = sticks[0]; len <= sum / 2; len++)
{
if (sum % len == 0)
{
used[0] = true;
num = sum / len;
if (dfs(0, len - sticks[0], 0))
{
end = true;
printf("%d/n", len);
break;
}
used[0] = false;
}
}
if (!end)
printf("%d/n", sum);
memset(used, 0, sizeof(used));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: