贪心算法的应用

考虑最大利润

输入:种类数、需求量、各种类的库存量、各种类的总价

输出:最大利润

cpp 复制代码
#include <iostream>
#include <algorithm>//调用sort排序
using namespace std;
struct mooncake{
    double store;
    double price;
    double tprice;
}cake[1000];
bool cmp(mooncake a,mooncake b)
{
return a.price>b.price;
}
int main(){
    int kinds;
    double needs,profits=0;
    cin>>kinds>>needs;
    for(int i=0;i<kinds;i++)
    cin>>cake[i].store;
    for(int i=0;i<kinds;i++)
    {
        cin>>cake[i].tprice;
        cake[i].price=cake[i].tprice/cake[i].store;
    }
    sort(cake,cake+kinds,cmp);//由大到小排序
    for(int i=0;i<kinds;i++){
        if(cake[i].store<=needs)//供应充足
        {
            needs-=cake[i].store;//更新需求量
            profits=cake[i].tprice;
        }else{//供应不足:一定要手动结束,否则会继续循环
            profits+=cake[i].price*needs;//由单价一个个算出 
            break;//手动结束
        }
    }
    cout<<profits;
    return 0;
}

考虑最小数

输入:0-9位数的次数

输出:由该数所组成的最小数

cpp 复制代码
#include <iostream>
using namespace std;
int main(){
    int count[10];//分别记录0-9的个数
    for(int i=0;i<10;i++)
    cin>>count[i];
    for(int i=1;i<10;i++)//先确定首位
        if(count[i]>0)
        {
            cout<<i;
            count[i]--;
            break;
    }
    //直接由0-9一个个输出
    for(int i=0;i<10;i++)//循环各个位数
    for(int j=0;j<count[i];j++)//判断每个位数的次数 
    cout<<i;
    return 0;
}

统计不相交的区间个数-区间贪心

输入:区间个数、各区间的左右端点

输出:不相交的区间个数

cpp 复制代码
#include <iostream>
#include <algorithm>//sort方法
using namespace std;
struct interval{//定义区间结构体
    int left;
    int right;
}inter[100];
bool cmp(interval a,interval b){
    if(a.left!=b.left) return a.left>b.left;//左端点由大到小排序
    else return a.right<b.right;//右端点由小到大排序
}
int main(){
    int n;
    int count=1;//记录不相交的区间个数 
    cin>>n;
        for(int i=0;i<n;i++)
        cin>>inter[i].left>>inter[i].right;
    sort(inter,inter+n,cmp);
    int lastval=inter[0].left;//存最大的:最右端的左端点
    for(int i=1;i<n;i++)
        if(inter[i].right<=lastval)//右端点小于左端点,说明这两个区间不相交
        {
            lastval=inter[i].left;//更新左端点
            count++;
    }else count--;
    cout<<count<<endl;
    return 0;
}

贪心算法:考虑当前情况下局部最优的策略,从而使全局达到最优的方法

相关推荐
超级码力6661 小时前
【Latex文件架构】Latex文件架构模板
算法·数学建模·信息可视化
穿条秋裤到处跑1 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
Merlos_wind2 小时前
HashMap详解
算法·哈希算法·散列表
汉克老师2 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
Yzzz-F4 小时前
Problem - 2205D - Codeforces
算法
智者知已应修善业5 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
Halo_tjn5 小时前
Java Set集合相关知识点
java·开发语言·算法
生成论实验室6 小时前
《事件关系阴阳博弈动力学:识势应势之道》第四篇:降U动力学——认知确定度的自驱演化
人工智能·科技·神经网络·算法·架构
AI科技星6 小时前
全域数学·72分册:场计算机卷【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
科研前沿7 小时前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算