补给站最优花费问题
问题理解
小U需要在 M 天内每天消耗一份食物,并且她会在 N 个补给站中购买食物。每个补给站的食物价格不同,我们需要找到一种购买策略,使得总花费最小。
本题采用贪心算法求解即可
贪心策略
- 局部最优选择:在每一天,小U应该选择当前能到达的补给站中价格最低的食物。
- 全局最优结果:通过每天选择价格最低的食物,最终的总花费应该是最小的。
算法步骤
-
初始化:
- 记录当前能到达的补给站中食物的最低价格。
- 初始化总花费为0。
-
遍历每一天:
- 如果当前天数有补给站,更新最低价格。
- 无论当前天数是否有补给站,都以当前最低价格购买一份食物。
-
返回总花费。
数据结构选择
- 使用
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刷题功能,我总结了以下高效学习方法:
-
制定刷题计划:
- 每天设定一个刷题目标,例如每天解决2-3道题目。可以根据自己的时间和能力来调整目标。
- 选择不同难度的题目,从简单到复杂,逐步提高自己的能力。
-
利用错题进行针对性学习:
- 对于做错的题目,不要立即查看答案,先尝试自己找出错误的原因。
- 如果实在无法解决,可以查看答案并理解解题思路,然后重新尝试自己解决。
-
总结和反思:
- 每完成一道题目,都要进行总结和反思,记录下解题思路和遇到的问题。
- 定期回顾这些总结,可以帮助巩固知识点和提高解题能力。
工具运用
为了达到更好的学习效果,可以将AI刷题功能与其他学习资源相结合:
-
结合在线课程:
- 在学习某个算法或数据结构时,可以结合在线课程进行学习。例如,Coursera、LeetCode等平台提供了丰富的课程资源。
-
使用AI辅助工具:
- 在刷题过程中,可以使用AI辅助工具来帮助理解题目和提供解题思路。例如,豆包MarsCode AI可以提供实时的解题建议和错误分析。