POJ 1011 Sticks(dfs+剪枝)
http://poj.org/problem?id=1011
题意:若干个相同长度的棍子被剪成若干长度的小棍,求每根棍子原来的可能最小长度。
思路:很经典的搜索题。
我一开始各种超时,这题需要很多剪枝。
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std; int n;
int a[];
int vis[]; bool cmp(int a, int b)
{
return a > b;
} int dfs(int len, int left_len, int number) //棍子长度、还需要匹配长度、未匹配棍子数量
{
if (left_len == && number == ) return len; //所有棍子已全部匹配完毕
if (left_len == ) //已匹配完一根棍子
left_len = len;
for (int i = ; i < n; i++)
{
if (!vis[i] && a[i] <= left_len)
{
vis[i] = ;
if (dfs(len, left_len - a[i], number - )) //深搜
return len;
vis[i] = ;
if (left_len == a[i] || len == left_len) break; //剪枝,没有数可以和当前值匹配,直接跳出循环
while (a[i] == a[i + ]) i++; //剪枝,如果后面和前面一样,则跳过
}
}
return ;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n && n)
{
memset(vis, , sizeof(vis));
int sum = ;
int maxn = ;
for (int i = ; i < n; i++)
{
cin >> a[i];
sum += a[i];
//if (a[i]> maxn) maxn = a[i]; //记录长棍子,dfs时从最长棍子开始
}
int k = ;
sort(a, a + n,cmp);
for (int i = a[]; i <= sum; i++)
{
if (sum%i == ) //剪枝,不能除尽说明棍子长度不能为i
{
k = dfs(i, , n);
if (k) break;
}
}
cout << k << endl;
}
return ;
}
POJ 1011 Sticks(dfs+剪枝)的更多相关文章
- POJ 1011 - Sticks DFS+剪枝
POJ 1011 - Sticks 题意: 一把等长的木段被随机砍成 n 条小木条 已知他们各自的长度,问原来这些木段可能的最小长度是多少 分析: 1. 该长度必能被总长整除 ...
- POJ 1011 Sticks dfs,剪枝 难度:2
http://poj.org/problem?id=1011 要把所给的集合分成几个集合,每个集合相加之和ans相等,且ans最小,因为这个和ans只在[1,64*50]内,所以可以用dfs一试 首先 ...
- poj 1011 Sticks ,剪枝神题
木棒 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 118943 Accepted: 27429 Description 乔治拿 ...
- DFS(剪枝) POJ 1011 Sticks
题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...
- 搜索+剪枝——POJ 1011 Sticks
搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0 ...
- poj 1011 Sticks (DFS+剪枝)
Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 127771 Accepted: 29926 Descrip ...
- POJ 1011 Sticks 【DFS 剪枝】
题目链接:http://poj.org/problem?id=1011 Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
- poj 1011 :Sticks (dfs+剪枝)
题意:给出n根小棒的长度stick[i],已知这n根小棒原本由若干根长度相同的长木棒(原棒)分解而来.求出原棒的最小可能长度. 思路:dfs+剪枝.蛮经典的题目,重点在于dfs剪枝的设计.先说先具体的 ...
- OpenJudge 2817:木棒 / Poj 1011 Sticks
1.链接地址: http://bailian.openjudge.cn/practice/2817/ http://poj.org/problem?id=1011 2.题目: 总时间限制: 1000m ...
- uva 215 hdu 1455 uvalive5522 poj 1011 sticks
//这题又折腾了两天 心好累 //poj.hdu数据极弱,找虐请上uvalive 题意:给出n个数,将其分为任意份,每份里的数字和为同一个值.求每份里数字和可能的最小值. 解法:dfs+剪枝 1.按降 ...
随机推荐
- 003-Nginx 设置Header 获取真实IP
1.X-Forwarded-For的定义: X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项.它 ...
- 【剑指offer】替换空格
一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.思路: Python代码,先 ...
- byte处理的几种方法
/** * 字符串转16进制byte * @param * @return * @throws Exception * @author hw * @date 2018/10/19 9:47 */ pr ...
- 11.sklearn.preprocessing.LabelEncoder的作用
In [5]: from sklearn import preprocessing ...: le =preprocessing.LabelEncoder() ...: le.fit(["p ...
- vue学习之四组件系统
vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 一.Vue.js组件系统 每一个 ...
- abap 基本知识
sap gui 安装教程:http://www.itpub.net/forum.php?mod=viewthread&tid=2090890 1:abap 基本数据类型: i(整型),f(浮点 ...
- [py][mx]django添加后台课程机构页数据-图片上传设置
分析下课程页前台部分 机构类别-目前机构库中没有这个字段,需要追加下 所在地区 xadmin可以手动添加 课程机构 涉及到机构封面图, 即图片上传media设置, 也需要在xadmin里手动添加几条 ...
- TileMap地图
参考资料: http://8287044.blog.51cto.com/5179921/1045274 TileMap编辑器使用 1.认识TileMap TileMap是一款开源的地图编辑 ...
- 我的2015年ccf的解答
只做了前三个题,在本地调试好了,不知为什么错了,好歹做了那么久,就记录一下了(注:这不是标准答案,只是我给出的解答) 这是第一题的代码: #include<stdio.h> #includ ...
- c#: using Microsoft.Office.Interop.Excel 异常
解决方法: Project>Reference>右键Add Reference...>Choose Microsoft Excel 15.0 Object Library