目录

  • 题目描述
  • 示例
    • 输入
    • 输出
  • 说明
  • 分析
  • 代码
    • 动规
    • 贪心
  • 其他题目

题目描述

在一条直的马路上,有n棵树,每棵树有一个坐标,代表它们距离马路起点的距离。 如果每相邻的两棵树之间的间隔不小于d,那么我们认为这些树是美观的。 请计算出最少移除多少棵树,可以让这些树变得美观。
树木的棵树为n,1<=n<=1e5。 树木的坐标用trees[]表示,0<=trees[i]<=1e9。最小美观间隔为d,1<=d<=1e9。保证输入的坐标是排好序的,且两两不相同。

示例

输入

[1,2,3,5,6]
2

输出

2

说明

样例中,将位置2与6的树木移走,剩下[1,3,5],它们是美观的。

分析

我在一开始把这道题目当作了比较简单的动规。保证相邻两颗树的距离不小于d,这是个很明显的最优子问题结构。
设dp[i]为保留树木i作为最后一棵树木时留下树木的最大数量。遍历所有的j<i,当tree i与tree j的距离不低于d时,更新dp。状态转移方程为:

dp[i]=max(dp[i],dp[j]+1)

后面想到可以用贪心去解决。可以证明:最后一棵树一定可以保留,向前依次取距离满足条件的所有树即可。或是保留第一棵树,之后向后遍历,如果当前的树与上一棵选中的树之间的距离大于等于d,那么就保留这棵树,否则移除。

证明过程为:假设最终的最优解不可以包括最后一棵树,那么假设最优解中最后一棵树为I(n),倒数第二棵树为I(n-1)。则有trees[I(n)]-trees[I(n-1)]>=d。由于最后一棵树j一定满足trees[j]>trees[I(n)],因此一定有trees[j]-trees[I(n-1)]>d。所以不选择树I(n),而是选择j是完全可以的,因此保留最后一棵树一定可以得到最优解。以此类推,每次选择当前满足条件的最后面一棵树,问题解决。

显然动规算法的时间复杂度为O(N^2),贪心算法的时间复杂度为O(N)。

代码

动规

#include <vector>
#include <iostream>
using namespace std;
class Solution {public:int treePlanning(vector<int> &trees, int d) {// write your code here.int dp[trees.size()];for(int i=0; i<trees.size(); i++)dp[i]=1;for(int i=1; i<trees.size(); i++) {for(int j=0; j<i&&trees[i]-trees[j]>=d; j++) {dp[i]=max(dp[i],dp[j]+1);}}int max=0;for(int i=0; i<trees.size(); i++){cout<<dp[i]<<" ";if(dp[i]>max)max=dp[i];}return trees.size()-max;}
};
int main() {vector<int> v;v.push_back(0);v.push_back(2);v.push_back(3);v.push_back(5);v.push_back(6);v.push_back(9);v.push_back(10);v.push_back(13);v.push_back(14);v.push_back(15);Solution s;cout<<endl<<s.treePlanning(v,2);return 0;
}

贪心

class Solution {public:int treePlanning(vector<int> &trees, int d) {// write your code here.int count=1;int curr=trees.size()-1;while(1) {int j=curr-1;while(j>=0&&trees[curr]-trees[j]<d) {j--;}if(j<0)break;if(trees[curr]-trees[j]>=d)curr=j;count++;}return trees.size()-count;}
};

其他题目

超级码力在线编程大赛初赛第1场-2-正三角形拼接题解

超级码力在线编程大赛初赛第1场-4-对称前后缀题解

三道题目AC,喜提阿里t恤一件~

超级码力在线编程大赛初赛第1场-1-树木规划题解相关推荐

  1. 超级码力在线编程大赛初赛 第2场 1.三角魔法

    超级码力在线编程大赛初赛 第2场 1.三角魔法 题目链接 描述 小栖必须在一个三角形中才能施展魔法,现在他知道自己的坐标和三个点的坐标,他想知道他能否施展魔法 −1e9≤xi,yi≤1e9-1e9\l ...

  2. 超级码力在线编程大赛初赛 第3场 1.最大公倍数

    超级码力在线编程大赛初赛 第3场 1.最大公倍数 题目链接 描述 小栖有一个区间,他准备从中取三个数,他想知道如何取才能使得它们的最小公倍数最大 请直接告诉小栖最小公倍数是多少. 示例 输入: a = ...

  3. 超级码力在线编程大赛初赛 第2场 题解

    超级码力在线编程大赛初赛 第2场 题解 题目出的对退役老年选手很友好,拿个T恤跑路- 下面的题解仅代表个人观点,出了问题,概不负责. 比赛链接:https://tianchi.aliyun.com/o ...

  4. 阿里云 超级码力在线编程大赛初赛 第1场(第245名)

    文章目录 1. 比赛结果 2. 题目 1. 树木规划 2. 正三角形拼接 3. 大楼间穿梭 4. 对称前后缀 1. 比赛结果 通过了 3 题,第245名,进入复赛了,收获 T恤 一件,哈哈. 2. 题 ...

  5. 阿里云 超级码力在线编程大赛初赛 第2场 题目4. 小栖的金字塔(超级卡特兰数+除法求模/乘法逆元)

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683739284070 2. 解题 按道 ...

  6. 阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end

    文章目录 1. 题目 2. 解题 1. 题目 样例1: 输入: "abcd" "bcda" 输出: true样例2: 输入: "abcd" ...

  7. 阿里云 超级码力在线编程大赛初赛 第3场 题目2. 房屋染色(DP)

    文章目录 1. 题目 2. 解题 1. 题目 有n个房子在一列直线上,现在Bob需要给房屋染色,共有k种颜色. 每个房屋染不同的颜色费用也不同,Bob希望有一种染色方案使得相邻的房屋颜色不同. 但Bo ...

  8. 阿里云 超级码力在线编程大赛初赛 第3场 题目1. 最大公倍数

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15179470890799741/85251759933690467 2. 解题 看的 ...

  9. 阿里云 超级码力在线编程大赛初赛 第3场 题目4. 完美字符串

    文章目录 1. 题目 2. 解题 1. 题目 描述 定义若一个字符串的每个字符均为'1',则该字符串称为完美字符串. 给定一个只由'0'和'1'组成的字符串s和一个整数k. 你可以对字符串进行任意次以 ...

最新文章

  1. mongo 3.4分片集群系列之六:详解配置数据库
  2. 非阻塞,send后马上close消息能成功发出去吗
  3. aop springboot 传入参数_Spring、SpringMVC和SpringBoot看这一篇就够了!
  4. boost::hana::embedding用法的测试程序
  5. 在C语言中malloc怎么声明,问下关于malloc的声明问题
  6. ASP.NET Core使用功能开关控制路由访问
  7. 延迟开学?这些教育读书公众号可以帮助孩子学习! 你都关注了吗?
  8. oracle基本的操作命令,oracle命令基本操作
  9. 防范攻击 加强管控 - 数据库安全的16条军规
  10. 动态规划之正则表达式匹配字符串
  11. 【Flink】Flink 1.12.2 TaskSlot
  12. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——3.5 技巧:更改元素的HTML内容...
  13. 用RDA方式同步SQLCE与SQL SERVER数据库
  14. leetcode 868. Binary Gap
  15. postgreSQL中文拼音排序
  16. Linux 创建oracle数据库
  17. BouncyCastle使用注意事项
  18. 2021年9月国产数据库排行榜-墨天轮:达梦奋起直追紧逼OceanBase,openGauss反超PolarDB再升一位
  19. 可用的rtmp卫视直播地址
  20. 通过微信扫码登录剖析 oauth2 认证授权技术

热门文章

  1. w7计算机休眠网络就断了,设置Win7电脑休眠时不断开WiFi教程
  2. 前端开发----简介
  3. 观测风如何变成10m风
  4. 查看微信中撤回的图片(RIO)
  5. 【Linux 主机ssh远程连接暴力破解详解】
  6. 什么是Spring、Spring的优点
  7. 华为数字化转型之道 结语 数字化转型的8个成功要素
  8. 消费新品周报 | 奔富发布2019珍藏系列16款葡萄酒;欧乐-B推出AI电动牙刷
  9. 面对同行抄袭或者抹黑,应该怎么办?
  10. Excel if函数用法