acwing 167. 木棒
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。
然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。
请你设计一个程序,帮助乔治计算木棒的可能最小长度。
每一节木棍的长度都用大于零的整数表示。
注意: 数据中可能包含长度大于50的木棒,请在处理时忽略这些木棒。
输入格式
输入包含多组数据,每组数据包括两行。
第一行是一个不超过64的整数,表示砍断之后共有多少节木棍。
第二行是截断以后,所得到的各节木棍的长度。
在最后一组数据之后,是一个零。
输出格式
为每组数据,分别输出原始木棒的可能最小长度,每组数据占一行。
我的TLE代码 改成c的数组操作才通过
// 11111111.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream> #include <iostream>
#include <algorithm>
#include <memory.h> using namespace std; int n, m; const int N = ;
int arr[N];
int realCount;
int maxLen = ;
int sum = ;
int len;
int tryCnt;
int vis[N]; int cmp(int a, int b)//从大到小排序
{
return a > b;
} bool dfs(int segCount, int segLen, int lastSelect)
{
bool bret = false;
if (segCount == tryCnt) return true;
if (segLen == len) return dfs(segCount + , , );
int fail = ;
for (int i = lastSelect; i < realCount; i++) { if (!vis[i] && arr[i] != fail && segLen + arr[i] <= len)//没有被访问,不是上一次失败的值,长度满足在len以内
{
vis[i] = ;
if (dfs(segCount, segLen + arr[i], i + ))//开始下一次dfs
return true;
fail = arr[i];//失败了,当然要记录了
vis[i] = ;//这个数没有选择
if (segLen == || segLen + arr[i] == len)//如果cab为0,或者相加正好是len,但是失败了,那么一定是失败了.
return false;
}
} return false;
} int main()
{
ios::sync_with_stdio(false); while (cin >> n && (n != )) {
int sum = ;
for (int i = ; i < n; i++) {
int tmp;
cin >> tmp;
if (tmp > )
continue;
arr[realCount] = tmp;
maxLen = max(maxLen, arr[realCount]);
sum += arr[realCount++];
}
sort(arr, arr + realCount,cmp); for (len = maxLen; len <= sum; len++)//优化
{
if (sum%len)//如果除不尽,肯定不满足题意
continue;
tryCnt = sum / len;//计算出cnt多少段
//cout << "sum = " << sum << ". len = " << len << endl;
memset(vis, , sizeof(vis));//初始化
if (dfs(, , ))//搜索成功,最小值就是它
break;
}
cout << len << endl;
} return ;
}
acwing 167. 木棒的更多相关文章
- AcWing:167. 木棒(dfs + 剪枝)
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位. 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度. 请你设计一个程序,帮助乔 ...
- AcWing 165. 小猫爬山 DFS
165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...
- OpenJudge 2817:木棒 / Poj 1011 Sticks
1.链接地址: http://bailian.openjudge.cn/practice/2817/ http://poj.org/problem?id=1011 2.题目: 总时间限制: 1000m ...
- ServletInvocableHandlerMethod:167 - Error resolving argument
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(R ...
- Photoshop技能167个经典的Photoshop技巧大全
Photoshop技能167个经典的Photoshop技巧大全 学PS基础:Photoshop 技能167个 经典的Photoshop技巧大全,如果你是初级阶段的水平,熟读此文并掌握,马上进阶为中级 ...
- Uva 167 The Sultan's Successors(dfs)
题目链接:Uva 167 思路分析:八皇后问题,采用回溯法解决问题. 代码如下: #include <iostream> #include <string.h> using n ...
- [luogu P3797] 妖梦斩木棒 [线段树]
题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看做由三种小段构成,中间的 ...
- 29. leetcode 167. Two Sum II - Input array is sorted
167. Two Sum II - Input array is sorted Given an array of integers that is already sorted in ascendi ...
- 洛谷 P3797 妖梦斩木棒
https://www.luogu.org/problem/show?pid=3797 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了 ...
随机推荐
- PlayJava Day028
1.网络程序中套接字(Socket)用于将应用程序与端口连接起来 套接字是一个假想的连接装置,就像插插头的设备”插座“,用于连接电器与电线,如下所示 客户端:应用程序 <----> Soc ...
- How to: Handle Renamings and Deletions of Business Classes and their Properties 如何:处理业务类及其属性的重命名和删除
When developing an XAF application, you may be required to rename a persistent class or property due ...
- OSG绘制空间凹多边形并计算其面积
目录 1. 思路 1) 多边形分格化 2) 几何图元遍历 2. 实现 3. 参考 1. 思路 这个问题其实涉及到OSG中的两个问题:多边形分格化和几何图元遍历. 1) 多边形分格化 在OpenGL/O ...
- C lang:Pointer and multidimensional array
Xx_Introduction Double indrection:Address of Address;Pointer of Pointer Ax_Code #include<stdio.h& ...
- Effect:Mobile ocd
Satisfy the following two Keep your phone at all times Check your phone even if there's no news Alwa ...
- Windows 2012 R2 安装RD服务
默认只能同时允许2个用户连接,如果希望更多用户同时连接服务器,需要开启并激活远程桌面服务.参考:https://jingyan.baidu.com/article/9f7e7ec0f5a8686f28 ...
- SolrCloud 高可用集群搭建
1.1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...
- TP打印输出SQL语句
模型 -> getLastSql(); //TP打印SQL语句 $data = $this->field($field)->where($condition)->select( ...
- sql server数据库查询取出重复数据记录
问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录. 解决方案:在sql s ...
- 常用注解解析(因为不太明白@component和@configuration写了)
1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...