题目:
小R正在计划一次从地点A到地点B的徒步旅行,总路程需要 N
天。为了在旅途中保持充足的能量,小R每天必须消耗1份食物。幸运的是,小R在路途中每天都会经过一个补给站,可以购买食物进行补充。然而,每个补给站的食物每份的价格可能不同,并且小R最多只能同时携带 K
份食物。
现在,小R希望在保证每天都有食物的前提下,以最小的花费完成这次徒步旅行。你能帮助小R计算出最低的花费是多少吗?
样例1:
输入:
n = 5 ,k = 2 ,data = [1, 2, 3, 3, 2]
输出:9
样例2:
输入:
n = 6 ,k = 3 ,data = [4, 1, 5, 2, 1, 3]
输出:9
样例3:
输入:
n = 4 ,k = 1 ,data = [3, 2, 4, 1]
输出:10
因为我还没有学dp,所以我对题目进行了推算:
我用变量len记录小R的位置,food记录小R身上有的食物,count记录小R的花费。
- 当小R到达的补给站中的价格比后续补给站高的时候,在这里买肯定是吃亏的,因此我们需要判断此时小R身上有没有食物(food变量中);
- 如果有:就不买食物,等下一个更便宜的;
- 如果没有:就买一次食物,足够支撑到下一个更便宜的。
- 当小R到达的补给站中的价格不低于后面的补给站的时候,可以开始囤货
即从本补给站到小R身上的食物能撑到的远的补给站(len + k)的判断;- 如果低于,那么囤货停止,等到更低的位置再进行囤货。
- 如果不低于小R本次的补给站费用(data[len]),那么可以为该补给站囤货(这时候需要判断小R身上的食物有没有超出限制k与多带了食物);
- 如果小R身上的食物没到上限(food < k)并且没有多带食物(n > len + food 也就是带的食物能走的天数小于走出的天数),那么囤货;
- 如果有一个不满足,那么后面也不需要判断,可以直接break掉
- 最后每轮减去一份食物,增加一格距离。
这样的思路我在devc中完成了一份代码:
#include<iostream>
#include<vector>
using namespace std;
void solve(){
int n, k;
cin >> n >> k;
int data[n];
for(int i = 0; i< n; i++){
cin >> data[i];
}
int food = 0, count = 0, len = 0;
while(len < n){
//后者便宜,只买一次
if(data[len] > data[len+1] && food == 0){
food ++;
count += data[len];
}else if(data[len] <= data[len+1]){
for(int j = len; j < len + k; j ++){
if(data[len] <= data[j]){
if(food < k && n > len + food){
food ++;
}else{
break;
}
count += data[len];
}
}
}
food --;
len ++;
}
cout << count << endl;
}
int main(){
ll t;
cin >> t;
while(t--){
solve();
}
return 0;
}
在devc中的运行也是没有问题的;
因此我将其移动到了豆包里面:
#include <iostream>
#include <vector>
int solution(int n, int k, std::vector<int> data) {
// Edit your code here
int food = 0, count = 0, len = 0;
while(len < n){
if(data[len] > data[len + 1] && food == 0){
food ++;
count += data[len];
}
else if(data[len] <= data[len + 1]){
for(int j = len; j < len + k; j++){
if(data[len] <= data[j]){
if(food < k && n > len + food){
food ++;
}else {
break;
}
count += data[len];
}
}
}
food --;
len ++;
}
return count;
}
int main() {
// Add your test cases here
std::cout << (solution(5, 2, {1, 2, 3, 3, 2}) == 9) << std::endl;
return 0;
}
这个内容在样例测试的时候是没有问题的——可以输出1
但是当提交的时候会直接运行错误:
因此想向各位大佬们求助一下这个提交结果错误的原因。
麻烦各位大佬看一看。