首页 > 试题广场 >

种花

[编程题]种花
  • 热度指数:3173 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
公园里有 n 个花园,初始时每个花园里都没有种花,园丁将花园从 到 n 编号并计划在编号为 的花园里恰好种 A朵花,他每天会选择一个区间 [LR]1≤L≤R≤N)并在编号为 到 的花园里各种一朵花,那么园丁至少要花多少天才能完成计划?

数据范围:

输入描述:
第一行包含一个整数 n 。

第二行包含 n 个空格隔开的数 ai 到 an


输出描述:
输出完成计划所需的最少天数。
示例1

输入

5
4 1 8 2 5

输出

14
示例2

输入

5
1 1 1 1 1

输出

1
let num = parseInt(read_line());
let line = '';
let newArr = [];
while(line = read_line()){
  newArr = line.split(' ').map(Number);
}
// 这里要理解题意:每天选择一个区间浇花,用最少的时间完成自己的浇花目标,也就是一个策略问题
// 这里要注意的是不能选最大区间一直种花,因为每个花园的种花目标不一致,这样会超出目标值
// 上面的数组中各个元素就是每个花园需要种花的数量
// 设编号1到i-1花坛种完需要dp[i]天 输出dp[num-1]
 function minTime(num,target){
   let dp = new Array(num).fill(0);
   dp[0] = target[0];
   for(let i=1;i<num;i++){
     if(target[i]<target[i-1]){
       dp[i] = dp[i-1];
     }else{
       dp[i] = dp[i-1] + target[i]-target[i-1];
     }
   }
   console.log(dp[num-1]);
 }
minTime(num,newArr);
ps:只能ac36% 也不知道啥毛病
发表于 2022-06-17 21:09:07 回复(0)