贪心算法几个经典例子c语言

后端 (44) 2023-09-20 12:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说贪心算法几个经典例子c语言,希望能够帮助你!!!。

贪心算法指的是,在解决问题时,总是做出在当前看来是最好的选择。也就是说,贪心算法中,无需考虑全局最优解,仅考虑每一步最优即可。(类似于人性的贪婪)

接下来我们从两道例题中感受一下。

贪心算法几个经典例子c语言_https://bianchenghao6.com/blog_后端_第1张

T1:便利店

题目描述

天宝来到便利店想买些饮料。便利店有各种型号的瓶装饮料售卖,不同型号的饮料卖不同的价格。1 瓶 0.25 升的卖 A 元,1 瓶 0.5 升的饮料卖 B 元,1 瓶 1 升的卖 C 元,1 瓶 2 升的卖 D 元。便利店里每种饮料都是无限供应。

天宝要买 N 升的饮料,最少需要花多少钱呢?聪明的你写个程序帮她算算吧。

已知

1) 1≤A,B,C,D≤108 ,1≤N≤109

2) 输入的数据都是整数

输入

输入数据按照下面格式

A B C D

N

输出

输出天宝要买 N 升的饮料所需要花的钱最小值。

样例输入

20 30 70 90
3

样例输出

150

提示

买 1 瓶 2 升的饮料和 2 瓶 0.5 升的饮料。 这样正好可以买到 3 升饮料,花费是 90+30+30=150 元。

题解:

最简单的一个,将价格分成两个部分,分别得到一升的最低价格,然后得到两升的最低价格(因为两升的饮料可以直接买两升,也可以买两个 1 升),然后用总升数 N 整除 2 乘按两升买的最低价格,然后 N 再对 2 求余数乘只能按 1 升买的价格。

一定要把所有的数换成 long long 类型,否则会造成溢出


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    long long a, b, c, d, n;
    cin >> a >> b >> c >> d;
    cin >> n;
    long long min1 = min(min(a * 4, b * 2), c);
    long long min2 = min(min1 * 2, d);
    cout << n / 2 * min2 + n % 2 * min1 << endl;
}
贪心算法几个经典例子c语言_https://bianchenghao6.com/blog_后端_第2张

T2:删数问题

给定一个十进制正整数 n(0<n<1000000000),每个数位上数字均不为 00。n 的位数为 m。
现在从 m 位中删除 k 位 (0<k<m),求生成的新整数最小为多少?
例如: n=9128456,k=2, 则生成的新整数最小为 12456。

输入格式

第一行 t, 表示有 t 组数据;
接下来 t 行,每一行表示一组测试数据,每组测试数据包含两个数字 n,k。

输出格式

t 行,每行一个数字,表示从 n 中删除 k 位后得到的最小整数。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

2
9128456 2
1444 3

样例输出

12456
1

题解:

方法是如果一个数大于他后边的数,那么就把他删除掉。因为要生成最小的整数,就一定要删除最靠前的而且比较大的那一个。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int k;
        string s;
        cin >> s >> k;
        while (k--)
        {
            
            for (long unsigned int i = 0; i < s.size(); i++)
            {
                if (s[i] > s[i + 1])
                {
                    s.erase(s.begin() + i);
                    i--;
                    break;
                }
            }
        }
        cout << s << endl;
    }
 
    return 0;
}

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。