2024字节青训营笔记(一) 补给站最优花费问题 | 豆包MarsCode AI 刷题

103 阅读3分钟

补给站最优花费问题

问题理解

小U需要在 M 天内每天消耗一份食物,并且她会在 N 个补给站中购买食物。每个补给站的食物价格不同,我们需要找到一种购买策略,使得总花费最小。

本题采用贪心算法求解即可

贪心策略

  1. 局部最优选择:在每一天,小U应该选择当前能到达的补给站中价格最低的食物。
  2. 全局最优结果:通过每天选择价格最低的食物,最终的总花费应该是最小的。

算法步骤

  1. 初始化

    • 记录当前能到达的补给站中食物的最低价格。
    • 初始化总花费为0。
  2. 遍历每一天

    • 如果当前天数有补给站,更新最低价格。
    • 无论当前天数是否有补给站,都以当前最低价格购买一份食物。
  3. 返回总花费

数据结构选择

  • 使用 map 来存储补给站的信息,键为天数,值为该天补给站的食物价格。
  • 使用一个变量 mn 来记录当前能到达的补给站中食物的最低价格。

代码解释

  • mn 用于记录当前能到达的补给站中食物 代码如下:
#include<bits/stdc++.h>
using namespace std;

int solution(int m, int n, std::vector<std::vector<int>> p) {

	int ans=0;
	int mn=1e9;

	set<int>s;
	map<int,int>mp;
	for(auto item:p){
		int d=item[0],cost=item[1];
		mp[d]=cost;
	}

	for(int i=0;i<m;i++){
		if(mp.count(i)){
			mn=min(mn,mp[i]);
			ans+=mn;
		}
		else{
			ans+=mn;
		}
	}

    return ans;
}

int main() {
    // Add your test cases here
    std::cout << (solution(5, 4, {{0, 2}, {1, 3}, {2, 1}, {3, 2}}) == 7);
    return 0;
}

学习计划

结合豆包MarsCode AI刷题功能,我总结了以下高效学习方法:

  1. 制定刷题计划

    • 每天设定一个刷题目标,例如每天解决2-3道题目。可以根据自己的时间和能力来调整目标。
    • 选择不同难度的题目,从简单到复杂,逐步提高自己的能力。
  2. 利用错题进行针对性学习

    • 对于做错的题目,不要立即查看答案,先尝试自己找出错误的原因。
    • 如果实在无法解决,可以查看答案并理解解题思路,然后重新尝试自己解决。
  3. 总结和反思

    • 每完成一道题目,都要进行总结和反思,记录下解题思路和遇到的问题。
    • 定期回顾这些总结,可以帮助巩固知识点和提高解题能力。

工具运用

为了达到更好的学习效果,可以将AI刷题功能与其他学习资源相结合:

  1. 结合在线课程

    • 在学习某个算法或数据结构时,可以结合在线课程进行学习。例如,Coursera、LeetCode等平台提供了丰富的课程资源。
  2. 使用AI辅助工具

    • 在刷题过程中,可以使用AI辅助工具来帮助理解题目和提供解题思路。例如,豆包MarsCode AI可以提供实时的解题建议和错误分析。