贪心问题题目集一(代码 注解)

目录

 介绍:

 题目一:

 题目二:

 题目三:

 题目四:

题目五:

 题目六:

题目七:

题目八:

 介绍:

 贪心算法是一种特殊的算法思想,它在每一步选择中都采取当前状态下最优的选择,从而希望达到全局最优的解。贪心算法的基本思路是通过贪心策略进行选择,每次选择都是局部最优的,但不能保证最终达到全局最优。

贪心算法的适用条件是问题具有贪心选择性质,即通过局部最优解可以得到全局最优解。而且贪心选择性质要能够推导出最优解的正确性。

贪心算法的步骤通常包括以下几个步骤:

1. 将问题分解成若干个子问题,问题的解可以通过这些子问题的解来构造;
2. 确定贪心选择,即每一步的最优选择;
3. 通过贪心选择得到最优解的一个部分,加入到问题的解中;
4. 对剩余的子问题进行相同的处理,直到所有子问题都被解决。

贪心算法的优点是简单、高效,但缺点是不能保证得到全局最优解。因此,在使用贪心算法时需要注意问题的特性,以确定贪心选择的正确性。同时,贪心算法通常作为其他算法的辅助算法使用,例如在动态规划中使用贪心选择来简化问题。

 题目一:

#include<iostream>
#include<cstring>
using namespace std;
int a[1010];
int flag[1010];//记录第i个问题放的箱子号
int v[1010];
int main()
{
    int n, cnt = 1;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        int flags = 0;
        for (int j = 1; j <= cnt; j++)
        {
            if (v[j] + a[i] <=100)//第j个箱子已有的加上该物体装不满100,则加入该箱子
            {
                flag[i] = j, flags = 1, v[j] += a[i];
                break;
            }
        }
        if (flags == 0)//已有箱子不够,再开一个箱子
            flag[i] = cnt + 1, cnt++,v[cnt]=a[i];
    }
    for (int i = 1; i <= n; i++)
        cout << a[i] << " " << flag[i] << endl;
    cout << cnt << endl;
}

 题目二:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n,k;
    cin>>n>>k;
    int a[1010];
    for(int i=1;i<=k+1;i++)
    {
        cin>>a[i];
    }
    int cnt=0,flag=1;
    int tmp=n;//表示还可以行驶的公里
    for(int i=1;i<=k+1;i++)
    {
        if(tmp<a[i])//不够行驶到下一个加油站
        {
           flag=0;//标记为无法到达终点
            break;
        }
        if(tmp-a[i]-a[i+1]<0)//是否可以不经过该加油站能到达下一个加油站
        {
            cnt++;//不可以,说明,要在该加油站加油,数量加一
            tmp=n;//公里数回到n
        }
        else
        {
            tmp-=a[i];//减去该次的公里数
        }
    }
    if(flag==1)
        cout<<cnt<<endl;
    else
        cout<<"No Solution!"<<endl;
}

 题目三:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	int s[1010], e[1010], n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> s[i] >> e[i];
	}
	sort(s + 1, s + 1 + n);//递增
	sort(e + 1, e + 1 + n);//递增
	int cnt = 1;//初始一个,因为开始时间从第二个开始
	int j = 1;//代表结束时间
	for (int i = 2; i <= n; i++)//开始时间从第二个开始遍历
	{
		if (e[j] > s[i])//开始时间小于上一个结束时间
		{
			cnt++;//会场加一
		}
		else//开始时间大于上一个结束时间,该会场可以容纳
			j++;
	}
	cout << cnt<<endl;
}

 题目四:

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int v)
{return a>v;}
int main()
{
    int n;
    int a[101000],b[101000];
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        b[i]=a[i];
    }
    int ma=0;
     for(int i=1;i<=n-1;i++)
    {
         sort(a+i,a+1+n,cmp);//从大到小排序,取最大的两个相加
         a[i+1]+=a[i];
        ma+=a[i+1]-1;
    }
    cout<<ma<<" ";
    int mn=0;
    for(int i=1;i<=n-1;i++)
    {
        sort(b+i,b+1+n);//从小到大排序,取最小的两个
         b[i+1]+=b[i];
        mn+=b[i+1]-1;
    }
    cout<<mn<<endl;
}

题目五:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    while (cin >> n)
    {
        int  flag1 = 0, flag2 = 0;
        int a[1100], b[1100];
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i];
        }
        for (int i = 1; i <= n; i++)
        {
            cin >> b[i];
        }
        sort(a + 1, a + 1 + n);//递增
        sort(b + 1, b + 1 + n);
       for(int i=1;i<=n/2;i++)//a的前一半与b的后一半比较
       {
           if(a[i]>b[n/2+i])
               flag1++;
           else
               flag2++;
       }
        for(int i=1;i<=n/2;i++)//b的前一半与a的后一半比较
       {
           if(b[i]>a[n/2+i])
               flag2++;
           else
               flag1++;
       }
        if (n%2!=1&&flag1 == flag2)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
}

 题目六:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,l;
    cin>>n>>l;
    int a[1010];
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1);//从小到大排序
    int cnt=0;
    for(int i=1;i<=n;i++)
    {
        if(l-a[i]>=0)
        {
            cnt++;
            l-=a[i];
        }
    }
    cout<<cnt<<endl;
}

题目七:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	int s[1010], e[1010], n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> s[i] >> e[i];
	}
	sort(s + 1, s + 1 + n);//递增
	sort(e + 1, e + 1 + n);//递增
	int cnt = 1;//初始一个,因为开始时间从第二个开始
	int j = 1;//代表结束时间
	for (int i = 2; i <= n; i++)//开始时间从第二个开始遍历
	{
		if (e[j] > s[i])//开始时间小于上一个结束时间
		{
			cnt++;//会场加一
		}
		else//开始时间大于上一个结束时间,该会场可以容纳
			j++;
	}
	cout << cnt<<endl;
}

题目八: 

 

#include<iostream>
#include<cmath>
using namespace std;
int n, n0, n1;
int min1 = 99999;
int a1, b1;//女生、男生宿舍人数
int judge(int k)//女生分k个宿舍
{
    if (n0 % k != 0)//不能平均分
        return 0;
    if(n0==k)//不能一个人一间
        return 0;
    if (n1 % (n - k) != 0)//不能均分
        return 0;
    if(n1==(n-k))//不能一个人一间
        return 0;
    int a = n0 / k, b = n1 / (n - k);
    if (min1 > abs(a - b))
    {
        min1 = abs(a - b);
        a1 = a, b1 = b;
    }
    return 1;
}
int main()
{
    cin >> n0 >> n1 >> n;
    for (int i = 1; i <= n-1; i++)
        judge(i);
    if (min1 != 99999)
        cout << n0 / a1 << " " << n1 / b1 << endl;
    else
        cout << "No Solution" << endl;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/464098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树的初步学习和顺序结构实现

当我们学完顺序表、链表、栈和队列的时候&#xff0c;我们就要开始学习树了。树对于以后的学习有非常大的帮助&#xff0c;尤其是排序。好了&#xff0c;开始我们的学习吧。 1.树的概念及结构 1.1树的结构 树结构是一种非线性结构。它是由n&#xff08;n>0&#xff09;个…

ISIS接口MD5 算法认证实验简述

默认情况下&#xff0c;ISIS接口认证通过在ISIS协议数据单元&#xff08;PDU&#xff09;中添加认证字段&#xff0c;例如&#xff1a;MD5 算法&#xff0c;用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中&#xff0c;并确保邻居之间的通信是可信的。它可…

【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)

作品展示&#xff1a; 背景需求&#xff1a; 利用华文彩云空心字&#xff08;粗胖字体。凑满9个拼图&#xff09;制作了3*3的拼图块 【教学类-34-09】20240310华文彩云学号拼图&#xff08;3*3格子浅灰底图 深灰拼图块&#xff09;&#xff08;AI对话大师&#xff09;-CSDN博…

唯一约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 唯一约束 唯一约束的特点是在某一个列上的内容不允许出现重复。 例如&#xff0c;现在要收集用户的信息&#xff0c;假设包含编号&#xff08;mid&#xff09;、姓名&…

【vue在主页中点击主页面如何弹出一个指定某个页面的窗口】

【vue在主页中点击主页面跳转到某个页面的操作完整过程】 1.首先在主页面中加入一个卡槽用于展示弹出的窗口 代码如下&#xff1a; <el-dialog :visible.sync"dialogVisible1" :close-on-click-modal"false" :title"title" class"dial…

Docker出现容器名称重复如何解决

假如你的重复容器名称是mysql5 删除已存在的容器&#xff1a;如果你不再需要那个已经存在的名为“mysql5”的容器&#xff0c;你可以删除它。使用下面的命令&#xff1a; docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除&#xff0c;你就可以重新使用这个…

Git全套教程一套精通git.跟学黑马笔记

Git全套教程一套精通git.跟学黑马笔记 文章目录 Git全套教程一套精通git.跟学黑马笔记1.版本管理工具概念2. 版本管理工具介绍2.1版本管理发展简史(维基百科)2.1.1 SVN(SubVersion)2.1.2 Git 3. Git 发展简史4. Git 的安装4.1 git 的下载4.2 安装4.3 基本配置4.4 为常用指令配置…

ElasticSearch之Nested对象

写在前面 本文看下es的nested嵌套对象相关内容。 1&#xff1a;es用了啥范式&#xff1f; 在关系型数据库中定义了6大数据库范式,即1&#xff0c;2&#xff0c;3&#xff0c;BC&#xff0c;4&#xff0c;5的NF&#xff08;normal form&#xff09;,分别如下&#xff1a; 1N…

快速去除或提取视频中的任何声音,你学会了吗

怎么提取视频中的音频&#xff1f;本文将向您介绍多个简单而有效的方法&#xff0c;帮助您轻松掌握如何提取视频中的音频。无论您是视频编辑新手还是经验丰富的用户&#xff0c;这些建议都将为您提供多样选择&#xff0c;满足各种需求。 方法一&#xff1a;使用在线转换工具提取…

一维差分(模板)

差分是前缀和的逆运算&#xff0c;对于一个数组a&#xff0c;其差分数组b的每一项都是a [ i ]和前一项a [ i − 1 ]的差。 **注意&#xff1a;**差分数组和原数组必须分开存放&#xff01;&#xff01;&#xff01;&#xff01; #include <iostream> using namespace s…

python爬虫-AES.CBS加密案例(mmz批量爬取)

下载mmz本页数据 批量下载请看主页&#xff01;&#xff01;&#xff01; 代码&#xff1a; import requests from Crypto.Cipher import AES import base64cookies {PHPSESSID: 48nu182kdlsmgfo2g7hl6eufsa,Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc: 1710568549,SECKEY_A…

deepseek-coder模型量化

1 简介 DeepSeek-Coder在多种编程语言和各种基准测试中取得了开源代码模型中最先进的性能。 为尝试在开发板进行部署&#xff0c;首先利用llama.cpp对其进行量化。 2 llama.cpp安装 git clone之后进入文件夹make即可&#xff0c;再将依赖补全pip install -r requirements.tx…

可视化图表:南丁格尔玫瑰图,来自历史上最著名的护士。

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;本文分享可视化图表设计的南丁格尔玫瑰图设计&#xff0c;欢迎老铁持续关注我们。 一、南丁格尔与玫瑰图 南丁格尔&#xff08;Florence Nightingale&#xff0c;1820年-1910年&#xff09;是一位英国护士和统计学家&…

江大白 | 万字长文,深度全面解读PyTorch内部机制,推荐阅读!

本文来源公众号“江大白”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;万字长文&#xff0c;深度全面解读PyTorch内部机制&#xff0c;推荐阅读&#xff01; 以下文章来源于知乎&#xff1a;人工智能前沿讲习 作者&#xff1a…

2024.4.17周报

目录 摘要 Abstract 文献阅读&#xff1a;耦合时间和非时间序列模型模拟城市洪涝区洪水深度 现有问题 提出方法 创新点 XGBoost和LSTM耦合模型 XGBoost算法 ​编辑 LSTM&#xff08;长短期记忆网络&#xff09; 耦合模型 研究实验 数据集 评估指标 研究目的 洪水…

海外媒体宣发套餐推广攻略轻松提升曝光率标题文章-华媒舍

在当今数字化时代&#xff0c;推广和宣传对于企业和个人都变得至关重要。但是如何有效地提高曝光率&#xff0c;吸引更多的目标受众成为了一个挑战。本文介绍一种名为《海外媒体宣发套餐推广攻略》的方法&#xff0c;通过使用该套餐&#xff0c;您可以轻松地提高宣传品曝光率&a…

SEED:基于SEED数据集的理解

声明&#xff1a;本文章内容&#xff0c;仅个人理解&#xff0c;如有看法&#xff0c;欢迎评论区讨论或私信。 文章目录 SEED数据集一、官网地址二、SEED详细内容论文1&#xff0c;文章信息&#xff1a;&#xff08;一&#xff09;摘要&#xff08;二&#xff09;引言&#xf…

【pynput】监控是否打开百度贴吧网页

文章目录 简介Demo 简介 有网友提过一个要求&#xff0c;用 Python 实现一个 电脑打开某网站就自动关机的功能。 想到的思路有两个&#xff1a; 【windows 平台】, 获取活动的窗口标题&#xff0c;如果标题里包含了某些网站名称, 那就使用关机命令 可以定时拉取标题, 也可以使…

一命通关递归

递归 简介 递归是我们在学C语言的时候&#xff0c;就已经接触到了的一个概念&#xff0c;相信大家的递归都是从这里开始的&#xff1a; 但是&#xff0c;在老师念ppt的时候&#xff0c;伴随着一些前轱辘不转后轱辘转的语言&#xff0c;我们往往都没有太去了解递归的工作原理和…

sqllab第三十四关通关笔记

知识点&#xff1a; 宽字节注入单引号闭合注意&#xff1a;不能直接在输入框进行宽字节注入&#xff0c;会被url编码&#xff0c;除非输入原始字符&#xff08;%df已经是url编码了&#xff0c;直接输入会二次编码&#xff09;错误注入 payload:username1%dforextractvalue(1,c…
最新文章