贪心算法

贪心算法是一种解决问题的策略,通常在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的。本文通过分析P1181 数列分段、P1208 混合牛奶、P1094 纪念品分组和P1803 线段覆盖等题目,展示了贪心算法在解决数论和组合问题上的应用和思路。
摘要由CSDN通过智能技术生成

贪心算法(又称贪婪算法)是指,在对求解问题,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 

 

例题1:

P1181 数列分段Section I

题目描述

对于给定的一个长度为 NN 的正整数数列 A_iAi​ ,现要将其分成连续的若干段,并且每段和不超过 MM (可以等于 MM),问最少能将其分成多少段使得满足要求。

输入输出格式

输入格式:

 

第1行包含两个正整数 N,MN,M ,表示了数列 A_iAi​ 的长度与每段和的最大值,第 22 行包含 NN 个空格隔开的非负整数 A_iAi​ ,如题目所述。

 

输出格式:

 

一个正整数,输出最少划分的段数。

 

输入输出样例

输入样例#1: 

5 6
4 2 4 5 1

输出样例#1: 

3

 

分析:边读入,边进行,如果大于所输入,便加一个分段

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,ans =1;
int main()
{
    int k = 0;
    scanf("%d %d",&n,&m);
    while(n--)
    {
        int a;
        scanf("%d",&a);
        if(k + a <= m)
        {
            k += a;
        }
        else
        {
            ans ++;
            k = a;
        }

    }
    printf("%d",ans);
    return 0;
}

 

P1208 [USACO1.3]混合牛奶 Mixing Milk

 

题目描述

由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助Marry乳业找到最优的牛奶采购方案。

Marry乳业从一些奶农手中采购牛奶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值