走进“深度搜索基础训练“,踏入c++算法殿堂(二)

简介: 走进“深度搜索基础训练“,踏入c++算法殿堂(二)

小航做起了第二道题……

【搜索与回溯算法】装载问题 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB 具体限制

题目描述:

有一批共n个集装箱要装上艘载重量为c的轮船,其中集装箱i的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。

输入:

第一行有2个正整数n和c。n是集装箱数,c是轮船的载重量。接下来的1行中有n个正整数,表示集装箱的重量。

输出:

将计算出的最大装载重量输出

样例输入:

5 10
7 2 6 5 4
样例输出:

10
数据范围限制:

n<=35,c<=1000

“其实这就是一道超级简单的背包问题,可以用递归解决。”小航想,“建立一个临时重量和最终重量,搜索每一个数字(选与不选),只要搜索后的结果大于最终结果,就赋值。”

#include<iostream>
using namespace std;
int n,c,w[40],s;
void dfs(int x,int sx)//第x个物品,sx为临时重量
{
    if(x>n)
    {
        if(sx>s) s=sx;//赋值
        return;
    }
    else
    {
        if(sx+w[x]<=c)//如果装入此物品,还没超载的话……
        {
            dfs(x+1,sx+w[x]);//装入此物品,并搜索下一件物品
        }
        dfs(x+1,sx);//在不装入此物品的情况下,搜索下一件物品
    }
}
int main()
{
    cin>>n>>c;
    for(int i=1;i<=n;i++) cin>>w[i];
    dfs(1,0);
    cout<<s;//输出最终重量
}
   但是。小航后来知道,这个看似简单的程序险些超时。他不甘心,修改了一下:
#include<bits/stdc++.h>
using namespace std;
int n,c,w[40],s,b[40],ms=0;
void dg(int x)
{
    if(s>=c)
    {
        if(s==c)
        {
            printf("%d",s);
            exit(0);
        }
        s-=w[x-1];
        if(ms<s)
            ms=s;
        s+=w[x-1];
    }
    else if(x==n)
    {
        if(ms<s)
            ms=s;
    }
    else
    {
        s+=w[x];
        dg(x+1);
        s-=w[x];
        dg(x+1);
    }
    return;
}
int main()
{
    scanf("%d%d",&n,&c);
    for(int i=0;i<n;i++)
        scanf("%d",&w[i]);
    dg(0);
    printf("%d",ms);
    return 0;
}
    这样运行时间缩短了不少,复杂度是n的……。

    之后,下一题又映入眼帘……
相关文章
|
5天前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
3天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
10天前
|
算法 安全 C++
用 C++ 算法控制员工上网的软件,关键逻辑是啥?来深度解读下
在企业信息化管理中,控制员工上网的软件成为保障网络秩序与提升办公效率的关键工具。该软件基于C++语言,融合红黑树、令牌桶和滑动窗口等算法,实现网址精准过滤、流量均衡分配及异常连接监测。通过高效的数据结构与算法设计,确保企业网络资源优化配置与安全防护升级,同时尊重员工权益,助力企业数字化发展。
32 4
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
C++构建 GAN 模型:生成器与判别器平衡训练的关键秘籍
生成对抗网络(GAN)是AI领域的明星,尤其在C++中构建时,平衡生成器与判别器的训练尤为关键。本文探讨了GAN的基本架构、训练原理及平衡训练的重要性,提出了包括合理初始化、精心设计损失函数、动态调整学习率、引入正则化技术和监测训练过程在内的五大策略,旨在确保GAN模型在C++环境下的高效、稳定训练,以生成高质量的结果,推动AI技术的发展。
68 10
|
3月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
135 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
2月前
|
算法 搜索推荐 数据库
二分搜索:高效的查找算法
【10月更文挑战第29天】通过对二分搜索的深入研究和应用,我们可以不断挖掘其潜力,为各种复杂问题提供高效的解决方案。相信在未来的科技发展中,二分搜索将继续发挥着重要的作用,为我们的生活和工作带来更多的便利和创新。
59 1
|
2月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
3月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
3月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
3月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
785 0
高精度算法(加、减、乘、除,使用c++实现)