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.按降 ...
随机推荐
- MyEclipse安装及破解步骤
MyEclipse2013 (32+64)下载地址(建议使用迅雷下载)http://downloads.myeclipseide.com/downloads/products/eworkbench/2 ...
- 一行代码彻底禁用WordPress缩略图自动裁剪功能
记得在博客分享七牛缩略图教程的时候,提到过 WordPress 默认会将上传的图片裁剪成多个,不但占用磁盘空间,也会拖慢网站性能,相当闹心! 当时也提到了解决办法: ①.关闭主题自带缩略图裁剪功能(若 ...
- Andrew Ng-ML-第七章-逻辑回归
1.极大似然估计-逻辑回归代价函数的简化 Andrew Ng的ML视频上讲到:逻辑回归的代价函数可以用最大似然估计法进行简化成上图中第二个式子. 所以学习了一下极大似然估计原理: 2.求偏导 逻辑回归 ...
- 20180531-Postman 常用测试结果验证及使用技巧
- [LeetCode] 787. Cheapest Flights Within K Stops_Medium tag: Dynamic Programming, BFS, Heap
There are n cities connected by m flights. Each fight starts from city u and arrives at v with a pri ...
- 浅谈Android View的定位
引言 今天我们来介绍Android坐标系统和View的定位,当然也会介绍View的滑动相关话题.下面让我们开始介绍吧. View的基础知识 View是Android中所有控件的基类,无论是TextVi ...
- 谁有stanford ner训练语料
[冒泡]良橙(1759086270) 12:14:17请教大家一个问题,我有1w多句用户的问题,但是有些包含了一些骂人,数字,特殊符号,甚至,语句不通,有什么方法可以过滤不[吐槽]爱发呆的小狮子(19 ...
- ubuntu shell脚本出错 dash
今天在Ubuntu下调试代码,明明是正确的,却仍然报错,查了错误信息才知道:Ubuntu中默认不是bash,而是为了加快开机速度,使用了dash. dash中需要严格的语法,而且与bash语法不同.例 ...
- Javascript-短路 与(&&)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- GIC400简介
GIC400是arm公司的中断控制IP,提供axi4接口,主要功能: 1)中断的使能(enable,mask); 中断的优先级(poriority); 中断的触发条件(level-sensitive ...