洛谷P1120 小木棍 [数据加强版]搜索
玄学剪支,正好复习一下搜索
感觉搜索题的套路就是先把整体框架打出来,然后再一步一步优化剪枝
1.从maxv到sumv/2枚举长度(想一想,为什么)
2. 开一个桶,从大到小开始枚举
3. 在搜索中,枚举到长度为x的木棍,则下一步也从x开始枚举
4. 如果当前长度为0或target却无解则break掉,很玄学QAQ….
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 4000;
int w[maxn];
int sumv, minv, maxv;
void dfs(int nums,int cur,int target,int p)
{
if(nums == 0)
{
printf("%d",target);
exit( 0 );
}
if(cur == target)
{
dfs(nums-1,0,target,maxv);
return;
}
for(int i = p;i >= minv;--i)
if(w[i] && i + cur <= target)
{
w[i] -= 1;
dfs(nums,cur + i, target, i);
w[i] += 1;
if (cur == 0 || cur + i == target ) break;
}
return;
}
int main()
{
// freopen("input.txt","r",stdin);
int n;
scanf("%d",&n);
minv = maxn, maxv = -1;
for(int i=1;i <= n; ++i)
{
int tmp;
scanf("%d",&tmp);
if(tmp > 50) continue;
w[tmp] += 1;
sumv += tmp;
minv = min(minv,tmp);
maxv = max(maxv,tmp);
}
for(int i = maxv;i <= sumv/2; ++i)
{
if(sumv % i != 0)continue;
dfs(sumv/i,0,i,maxv);
}
printf("%d",sumv);
return 0;
}
洛谷P1120 小木棍 [数据加强版]搜索的更多相关文章
- 洛谷 P1120 小木棍 [数据加强版]解题报告
P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它 ...
- 洛谷——P1120 小木棍 [数据加强版]
P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过5050. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍 ...
- 洛谷 P1120 小木棍 [数据加强版]
P1120 小木棍 [数据加强版] 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它 ...
- 洛谷—— P1120 小木棍 [数据加强版]
https://www.luogu.org/problem/show?pid=1120 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接 ...
- [洛谷P1120]小木棍 [数据加强版]
题目大意:有一些同样长的木棍,被切割成几段(长$\leqslant$50).给出每段小木棍的长度,找出原始木棍的最小可能长度. 题解:dfs C++ Code: #include<cstdio& ...
- 一本通&&洛谷——P1120 小木棍 [数据加强版]——题解
题目传送 一道特别毒瘤能提醒人不要忘记剪枝的题. 首先不要忘了管理员的话.忘把长度大于50的木棍过滤掉真的坑了不少人(包括我). 显然是一道DFS题 .考虑剪枝. 找找搜索要面临的维度.状态:原始木棍 ...
- P1120 小木棍 [数据加强版] 回溯法 终极剪枝
题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过5050. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度 ...
- P1120 小木棍 [数据加强版]
题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...
- P1120 小木棍 [数据加强版](poj 1011)
题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...
随机推荐
- Travel Card
Travel Card time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- poj 1734 floyd求最小环,可得到环上的每个点
#include<stdio.h> #include<string.h> #define inf 100000000 #define N 110 #define min(a, ...
- Tomcat日志配置远程Syslog采集
http://blog.csdn.net/leizi191110211/article/details/51593748
- 【ACM】hdu_2115_I Love This Game_201308021517
I Love This GameTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- C#--in逆变-out协变
MSDN上的解释 协变保留兼容性,逆变与之相反 in的使用 个人理解:就是表明泛型就是可以逆变的(逆变就是大变小) // Contravariant interface. interface ICon ...
- E - Just a Hook
E - Just a Hook HDU 1698 思路:区间修改即可. #include<cstdio> #include<cstring> #include<iostr ...
- GCD&&LCM的一些经典问题
1.1~n的全部数的最小公倍数:lightoj 1289 传送门 分析:素因子分解可知这个数等于小于1~n的全部素数的最高次幂的乘积 预处理1~n的全部质数,空间较大,筛选的时候用位图来压缩.和1~ ...
- iOS音频播放之AudioQueue(一):播放本地音乐
AudioQueue简单介绍 AudioStreamer说明 AudioQueue具体解释 AudioQueue工作原理 AudioQueue主要接口 AudioQueueNewOutput Audi ...
- Palindrome Linked List 234
推断是否为回文链栈 时间复杂度为O(n) 空间复杂度为O(1) : 运用递归 保证空间复杂度为O(1): 时间复杂度为O(n): 注意定义了一个全局变量 flag = true 用此标记来标记是否在推 ...
- 51-nod -1284 2 3 5 7的倍数
1284 . 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:65536 KB 分值: 5 给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 比如N = 10,仅仅有1不是2 3 ...