遇到不会的多想想,又不是做不出来,别总问别人。实在不行…

题目
1、题目描述
你打算用一个水罐给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 0 0 到 n − 1 n - 1 n−1 。其中,第 i i i 株植物的位置是 x = i x = i x=i 。 x = − 1 x = -1 x=−1 处有一条河,你可以在那里重新灌满你的水罐。
每一株植物都需要浇特定量的水。你将会按下面描述的方式完成浇水:
按从左到右的顺序给植物浇水。
在给当前植物浇完水之后,如果你没有足够的水 完全 浇灌下一株植物,那么你就需要返回河边重新装 满水罐。
你不能提前重新灌满水罐。
最初,你在河边( x = − 1 x = -1 x=−1),在 x x x 轴上每移动 一个单位 都需要 一步 。
给你一个下标从 0 0 0 开始的整数数组 p l a n t s plants plants ,数组由 n n n 个整数组成。其中, p l a n t s [ i ] plants[i] plants[i] 为第 i 株植物需要的水量。另有一个整数 c a p a c i t y capacity capacity 表示水罐的容量,返回浇灌所有植物需要的 步数 。
2、原题链接
解题报告
1、解题思路
(1)当前植物浇水的步数与之前已经浇水的步数之和为从开始到现在的总步数。
(2)如果当前植物所需水量
>
>
> 水壶中剩余水量那么就回去灌水再浇。所需步数为:
2
∗
x
+
1
2 * x + 1
2∗x+1
(3)如果当前植物所需水量
≤
\le
≤ 水壶中剩余水量。步数加一。
(4)更新水壶中水的量。
2、解题方法
DFS
2、代码详解
int dfs(int cap, int* plants, int plantsSize, int step, int capacity){
if(plantsSize == step){
return 0;
}
int ans = 0;
int Cap = cap;
if(plants[step] > cap){
ans += step*2 + 1;
Cap = capacity - plants[step];
}else{
++ans;
Cap -= plants[step];
}
++step;
return ans + dfs(Cap, plants, plantsSize, step, capacity);
}
int wateringPlants(int* plants, int plantsSize, int capacity){
return dfs(capacity, plants, plantsSize, 0, capacity);
}
总结
其实模拟题枚举就过了。