Acwing-167-木棒(搜索, 剪枝)
链接:
https://www.acwing.com/problem/content/169/
题意:
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。
然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。
请你设计一个程序,帮助乔治计算木棒的可能最小长度。
每一节木棍的长度都用大于零的整数表示。
注意: 数据中可能包含长度大于50的木棒,请在处理时忽略这些木棒。
思路:
剪枝, 优先从大到小, 同时记录上一次选的不符号, 下一次就不要选了.
从0开始,或者可以刚好选满的情况,无法拼出全部直接返回.
代码:
#include <bits/stdc++.h>
using namespace std;
int Vis[100], a[100];
int sum, mmax;
int n, nn, cnt, len;
bool Dfs(int stick, int tmp, int las)
{
if (stick > cnt)
return true;
if (tmp == len)
return Dfs(stick+1, 0, 1);
int lastlen = 0;
for (int i = las;i <= n;i++)
{
if (Vis[i] == 0 && tmp+a[i] <= len && a[i] != lastlen)
{
Vis[i] = 1;
if (Dfs(stick, tmp+a[i], i+1))
return true;
lastlen = a[i];
Vis[i] = 0;
if (tmp == 0 || tmp+a[i] == len)
return false;
}
}
return false;
}
int main()
{
while(scanf("%d", &nn) && nn)
{
sum = mmax = 0;
int v;
n = 0;
for (int i = 1; i <= nn; i++)
{
scanf("%d", &v);
if (v > 50)
continue;
a[++n] = v;
sum += a[n];
mmax = max(mmax, a[n]);
}
sort(a+1, a+1+n, greater<int>());
for (int i = mmax;i <= sum;i++)
{
if (sum%i)
continue;
memset(Vis, 0, sizeof(Vis));
cnt = sum/i;
len = i;
if (Dfs(1, 0, 1))
break;
}
printf("%d\n", len);
}
return 0;
}
Acwing-167-木棒(搜索, 剪枝)的更多相关文章
- acwing 167. 木棒
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位. 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度. 请你设计一个程序,帮助乔 ...
- 搜索+剪枝——POJ 1011 Sticks
搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0 ...
- NOIP2015 斗地主(搜索+剪枝)
4325: NOIP2015 斗地主 Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 270 Solved: 192[Submit][Status] ...
- hdu 5469 Antonidas(树的分治+字符串hashOR搜索+剪枝)
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这 ...
- hdu 5887 搜索+剪枝
Herbs Gathering Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 5113(2014北京—搜索+剪枝)
题意:有N*M的棋盘,用K种颜色去染,要求相邻块不能同色.已知每种颜色要染的块数,问能不能染,如果能,输出任一种染法. 最开始dfs失败了- -,优先搜索一行,搜完后进入下一列,超时.本来以为搜索不行 ...
- luogu 1731 搜索剪枝好题
搜索剪枝这个东西真的是骗分利器,然鹅我这方面菜的不行,所以搜索数学dp三方面是真的应该好好训练一下 一本通的确该认真的刷嗯 #include<bits/stdc++.h> using na ...
- [HNOI2002]彩票 (搜索+剪枝)
题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...
- luogu P3393 逃离僵尸岛-搜索剪枝+spfa
P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...
- [luogu 1092] 虫食算 (暴力搜索剪枝)
传送门 Description Input 包含四行. 第一行有一个正整数 (N≤26). 后面的三行,每行有一个由大写字母组成的字符串,分别代表两个加数以及和.这3个字符串左右两端都没有空格,从高位 ...
随机推荐
- [转帖]@RequestMapping 用法详解之地址映射(转)
@RequestMapping 用法详解之地址映射(转) https://www.cnblogs.com/qq78292959/p/3760560.html 从csdn 发现的文章 然后csdn指向c ...
- [转帖]Docker学习之Dockerfile命令详解
Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...
- SQL Server 下载与安装
1.首先去Microsoft官网下载对应的安装程序,下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.运行安 ...
- soap-ws获取ws中的所有的接口方法
soap-ws获取wsdl中的所有的接口方法 示例wsdl文件如下,生成的过程可以参考https://www.cnblogs.com/chenyun-/p/11502446.html: <def ...
- Synchronize和ReentrantLock区别
转自:https://blog.csdn.net/m0_37700275/article/details/83151850 目录介绍1.Synchronize和ReentrantLock区别 1.1 ...
- 2019年十一月(CSP S游记及AFO)
DAY-4 晚自习和班里以及搞OI的两个dalao商量了下决定停课了,当时觉得停得好晚,有的dalao都停一个月了.(现在感觉是明智的选择,我OI辣么菜还不如专注文化课) 晚上回家洗了个澡. DAY- ...
- luogu P3959(2017noipTG D2T2
luogu P3959(2017noipTG D2T2 不知道为什么,这两天见了好多伪装成图的dp题,这道也是. 最短路只有40分,实际上可以从数据范围n<=12看出来是状压dp. soluti ...
- k8s-高可用架构设计
docker的私有仓库harbor.容器化kubernetes部分组建.使用阿里云日志服务收集日志. 部署完成后,你将理解系统各组件的交互原理,进而能快速解决实际问题,所以本文档主要适合于那些有一定k ...
- django 项目开发及部署遇到的坑
1.django 连接oracle数据库遇到的坑 需求:通过plsql建立的oracle数据表,想要django操作这几个表 python manage.py inspectdb table_name ...
- jenkins 设置中文显示
这里使用的方法是安装中文语言包,安装的插件名称是:Localization: Chinese (Simplified) 1.在插件管理,搜索 Localization: Chinese (Simpli ...