小树剪发网1114_aow把抓

小树剪发网1114_aow把抓乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 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/168663.html原文链接:https://javaforall.net

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


相关推荐

  • linux异步io底层原理,异步IO简析

    linux异步io底层原理,异步IO简析什么是异步 IO UNIX 网络编程卷 1 中的 IO 多路复章节总结了几种典型 IO 模型 包括 阻塞 IO 非阻塞 IOIO 复用信号驱动式 IO 异步 IO 这些 IO 模型在本质上都是围绕着同步 异步 阻塞 非阻塞这几个特点在做一些不同的选择 IO 的过程是应用程序从某个设备读取数据 或者往设备写入数据 操作系统把这些设备抽象为描述符 fd 应用程序则在这些 fd 上面进行读写操作 由于 fd 的底层是设备 这里就会有个问题 设备还没

    2025年12月12日
    5
  • 透彻理解多元正态分布

    透彻理解多元正态分布本篇内容主要是对于基本书籍教材多元正态分布相关章节所写的学习笔记 结合自己的理解尽可能表述得通俗易懂 主要思路内容取自 程序员的数学之概率统计 前言多元正态分布就是含有多个变量的正态分布 为什么关于多元正态分布要专门写一篇学习笔记 因为其具有重要意义 在理论研究或者实际应用中 我们常会首先考虑多元正态分布是否适用 如果不符 再考虑其他类型的分布 基于下面两个特征 多元正态分布应用十分广泛

    2026年3月19日
    2
  • mysql != 索引_Mysql语法

    mysql != 索引_Mysql语法转:https://www.cnblogs.com/huanzi-qch/p/15238604.html介绍通常情况下,全文检索引擎我们一般会用ES组件(传送门:SpringBoot系列——ElasticSearch),但不是所有业务都有那么大的数据量、那么大的并发要求,MySQL5.7之后内置了ngram分词器,支持中文分词,使用全文索引,即可实现对中文语义分词检索MySQL支持全文索引和搜索:  MySQL中的全文索引是FULLTEXT类型的索引。  全文索引只能用于InnoDB或My

    2022年8月24日
    27
  • tkinter-grid布局详解

    tkinter-grid布局详解前文 tkinter pack 布局详解介绍了 pack 布局 相信对 tkinter 的布局套路有了一定的了解 本文将介绍另一种布局类 grid 同样 展示布局类与控件类的类间关系 文章目录 grid 默认分布 columnrowcol 从字面意思上可以推断 这种布局方式就像网格一样来分布控件 那么具体会呈现什么样的效果 要怎么编码控制呢 同样的套路 通过实例来进行直观的讲解 widget grid cnf kw

    2025年11月10日
    7
  • MySQL使用全文索引(fulltext index)

    MySQL使用全文索引(fulltext index)1.创建全文索引(FullTextindex)    旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。     不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息要随时关注官网,   1.1.创建表的同时创建全文索引       CREATETABLEa

    2025年8月4日
    7
  • 八图H5:在八图制作h5时候,会经常遇到的一些问题汇总解析!

    八图H5:在八图制作h5时候,会经常遇到的一些问题汇总解析!1 模板上的文字修改保存后不生效怎么办 答 建议更换谷歌浏览器进行编辑 即可解决文字修改不生效问题 2 模板标题和预览图如何修改 答 编辑器界面 左上角的标题和预览点开 即可修改标题和预览图 3 模板标题和预览图为什么无法修改 答 点开标题和预览 勾选循环播放 即可成功修改标题和预览图 4 图片为什么无法上传 答 建议你用美图秀秀把

    2026年3月18日
    1

发表回复

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

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