算法笔记day08

1.游游的水果大礼包

这道题很容易让人想到贪心,但是其实是一道枚举题,只需举一个反例,贪心无非就是哪个礼包价值大,就优先组成哪个礼包。

算法思路:

设可以组成x个a礼包,y个b礼包,求ax + by的最大值,只需枚举x,y的所有情况,在所有情况中挑一个最大值。

x的取值范围就是[0, min(2/n, m)] y的取值范围是[0, min(n,2/m)]

cpp 复制代码
#include <iostream>

typedef long long ll;

using namespace std;
int main()
{
    ll n ,m, a, b;
    cin >> n >> m >> a >> b;
    ll mx =min(n / 2 , m); 
    long long ret = 0;
    for(ll x = 0; x <= mx; x++)//枚举a礼包个数
    {
        ll y = min(n - (2 * x), (m - x)/2);//计算b礼包个数
        ret = max(ret,a * x + b * y );
    }
    cout << ret << endl;
    return 0;
}

2.买卖股票的最好时机(二)_牛客题霸_牛客网

算法思路:

这道题只需要意识到一个问题,

假设输入是[1,2,3,4,5,6],我一天买第二天卖,和我第一天买最后一天卖的收益是一样的。

将每一天的涨跌都记录下来,将所有涨价,都加在一起就是,最大的收益。

cpp 复制代码
#include <iostream>
using namespace std;


int main() 
{
    int n = 0;
    cin >> n;
    int price[n];
    for(int i = 0; i < n; i++)
    {
        cin >> price[i];
    }
    int sum[n];//记录每日的涨价和跌价
    int ret = 0;
    for(int i = 1; i < n; i++)
    {
        sum[i-1] = price[i] - price[i-1];
        if(sum[i-1] > 0)
        {
            ret += sum[i-1];
        }
    }
    cout << ret << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")
相关推荐
**蓝桉**11 分钟前
容器服务学习笔记
笔记·学习
zhangrelay1 小时前
三分钟云课实践速通--模拟电子技术-模电--SimulIDE
linux·笔记·学习·ubuntu·lubuntu
木木_王2 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习
lkforce2 小时前
MiniMind学习笔记(三)--train_pretrain.py(预训练)
笔记·机器学习·ai·预训练·minimind·train_pretrain
OSwich2 小时前
【 Godot 4 学习笔记】数组(Array)
笔记·学习·godot
数据皮皮侠AI2 小时前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
其实防守也摸鱼2 小时前
面试常问问题总结--护网蓝队方向
网络·笔记·安全·面试·职场和发展·护网·初级蓝队
z19408920663 小时前
Word题库转结构化:告别换行、选项与答案乱象
经验分享·笔记·语音识别
泽克5 小时前
3.4 智能化系统工程施工技术
笔记
南境十里·墨染春水5 小时前
C++笔记 forward完美转发
开发语言·c++·笔记