acwing-167. 木棒(深搜dfs+减枝)「建议收藏」

acwing-167. 木棒(深搜dfs+减枝)「建议收藏」乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 50 个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。输入格式输入包含多组数据,每组数据包括两行。第一行是一个不超过 64 的整数,表示砍断之后共有多少节木棍。第二行是截断以后,所得到的各节木棍的长度。在最后一组数据之后,是一个零。输出格式为每组数据,分别输出原始木棒的可能最小长度

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 50 个长度单位。

然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。

请你设计一个程序,帮助乔治计算木棒的可能最小长度。

每一节木棍的长度都用大于零的整数表示。

输入格式
输入包含多组数据,每组数据包括两行。

第一行是一个不超过 64 的整数,表示砍断之后共有多少节木棍。

第二行是截断以后,所得到的各节木棍的长度。

在最后一组数据之后,是一个零。

输出格式
为每组数据,分别输出原始木棒的可能最小长度,每组数据占一行。

数据范围
数据保证每一节木棍的长度均不大于 50。

输入样例:
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
0
输出样例:
6
5

题解
深搜dfs,各种剪枝,减枝不会的看上篇文章。每次决定是否开一个新的木棒,注意,头木棒和尾木棒如果策略不行则直接返回false,因为我们可以总是可以把中间的木棒等价交换到头或者末尾

#include<bits/stdc++.h>
using namespace std;
const int N = 70;
int n,m;
int a[N],w[N];
int sum,len;
int vis[N];
bool cmp(const int &a,const int &b){ 
   
    return a > b;
}
bool dfs(int u,int k,int start){ 
   
    if(u == n)return true;
    if(k == len)return dfs(u,0,0);
    for(int i = start;i < n;i ++){ 
   
        if(!vis[i] && k + a[i] <= len){ 
   
            vis[i] = true;
            bool f = dfs(u + 1,k + a[i],start + 1);
            vis[i] = false;
            
            if(f)return true;
            
            if(k + a[i] == len)return false;
            
            if(k == 0)return false;
            
            i ++;
            while(i < n && a[i] == a[i - 1])i ++;
            i --;
            
        }
    }
    return false;
}
int main(){ 
   
    while(cin>>n,n != 0){ 
   
        sum = 0;
        memset(vis,0,sizeof vis);
        for(int i = 0;i < n;i ++)cin>>a[i],sum += a[i];
        sort(a,a + n,cmp);
        for(int i = n;i >= 1;i --){ 
   
            if(sum % i == 0 ){ 
   
                len = sum / i;
                if(len >= a[0] && dfs(0,0,0)){ 
   
                    cout<<len <<endl;
                    break;
                }
            }
        }
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169136.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月9日 下午10:16
下一篇 2022年8月9日 下午10:36


相关推荐

  • UDP协议详解[通俗易懂]

    UDP协议详解[通俗易懂]目录1、简介2、UDP协议3、端口4、UDP和ARP之间的交互5、UDP适用场景6、UDP洪水1、简介UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。UDP使用具有最小协议机制的简单无连接通信模型。UDP提供数据

    2022年6月7日
    54
  • 一句话木马怎么连接_js木马源码

    一句话木马怎么连接_js木马源码“EASYNEWS新闻管理系统v1.01正式版”是在企业网站中非常常见的一套整站模版,在该网站系统的留言本组件中就存在着数据过滤不严漏洞,如果网站是默认路径和默认文件名安装的话,入侵者可以利用该漏洞直接上传ASP木马程序控制整个网站服务器。Step1搜索入侵目标使用了“EASYNEWS新闻管理系统v1.01正式版”的网站,在网站页面的底部版权声明处,往往会有关键字符为“WWW.52EAS…

    2025年6月20日
    4
  • Win10(Windows)系统中窗口切换 最大最小化窗口等快捷键

    Win10(Windows)系统中窗口切换 最大最小化窗口等快捷键一 窗口视图相关的快捷键最小化当前窗口 Alt 空格键 N 显示桌面 Win 键 D 再次按 Win D 则恢复显示原来的所有窗口 锁屏 Win 键 L 最大化当前窗口 将窗口大小还原等 Win 键 四个方向键 Win 键 上箭头 最大化当前窗口到全屏模式 Win 键 向下箭头 恢复窗口的大小 然后最小化窗口 Win 键 左箭头 捕捉当前窗口到屏幕的左半边 Win 键 右箭头 捕捉当前窗口到屏幕的右半边 切换窗口 Alt Tab 先按住 Alt 再点按 Tab 可按顺序往下切换窗口 继续按住 Al

    2026年3月17日
    1
  • Java游戏开发——开心农场

    Java游戏开发——开心农场游戏介绍 开心农场 是一款以种植为主的社交游戏 用户可以扮演一个农场的农场主 在自己的农场里开垦土地 种植各种水果蔬菜 本次开发了一个 开心农场 游戏 运行程序 效果如下图所示 鼠标先选定指定土地 默认选择第一块土地 点击 播种 按钮 可以播种种子 点击 生长 按钮 可以让作物处于生长阶段 点击 开花 按钮 可以让作物处于开花阶段 点击 结果 按钮 可以让作物结果 点击 收获 按钮 可以收

    2026年3月16日
    2
  • VBS 刷屏代码[通俗易懂]

    VBS 刷屏代码[通俗易懂]刷屏代码VBSScript使用方法:复制需要转发的内容,点击QQ或者微信窗口,,再双击VBS脚本即可自动运行OnErrorResumeNextDimxda,yesetxda=createobject(“wscript.shell”)`循环次数fori=1to200`循环间隔时间wscript.sleep70xda.AppActivatexda.sendKeys”^v”xda.sendKeys”%s”nextwscript.quit…

    2022年6月9日
    261
  • 2020全网最全Apache Knox实战总结

    2020全网最全Apache Knox实战总结最近一个月在研究 Apacheknox 谈不上精吧 或多或少有些心得截止目前 knox 最新版本为 1 4 实践过的版本有 1 3 1 1 1 0 HDP 下的 1 0 0 3 78 0 12 等 每个版本在组件 UI 跳转这块都有些问题 自己在 HDP3 1 下安装的 Knox 1 0 0 3 78 版本下进行修复后 形成了一个比较稳定的版本 如有需要可以私信我现在花点时间将此次 knox 之行进行总结如有问题欢迎讨论

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号