我是靠谱客的博主 酷酷星星,这篇文章主要介绍区间覆盖问题Love is worth years.❤ 热爱可抵岁月漫长。,现在分享给大家,希望可以做个参考。

目录

前言

题目介绍

解决思路:

贪心策略:

理论存在,实践开始!

全部代码如下:

总结: 

Love is worth years.❤热爱可抵岁月漫长。


前言

区域覆盖问题!!!!!!!!!!!!!!!!!!!!!!!!!不用我多说了吧!!
 

29035e22acd844fe8ab6217fe6aaa173.gif


题目介绍

b20e5307108e4461930e2925231b2737.png


解决思路:

12dfff16be97478cbe1a19e4943cb9df.png

 怎么做呢??很简单了!

贪心策略:

我们把他们每个之间的距离从大到小排列,每用一个线段,抵消一个大距离,最后用线段换距离

最后用总长减去换去的距离就是我们想要找到的!!!


理论存在,实践开始!


全部代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h> void sort (int *a,int *b,int n); void sort (int *a,int *b,int n) { int i,j,t,tt; for (i=0;i<n-1;i++) { for (j=0;j<n-1-i;j++) { if(a[j]<=a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t; t=b[j];b[j]=b[j+1];b[j+1]=t; } } } }//不必多说,冒泡排序降序。 int main() { int n,m; while(~scanf("%d%d",&n,&m))//输入包括多组数据,区间个数n(1≤n≤200) 使用线段数m(1≤m≤50)。 { int end[n];//区间结束 int start[n];//区间开始 int dis[n-1];//区间间隔 int i; int mmm[200]={1};//忽略它 for (i=0;i<n;i++) { scanf("%d",&end[i]); start[i]=end[i]-1; } sort(start,end,n);//按照开始节点排序 for (i=0;i<n;i++) { dis[i]=start[i]-end[i+1];//计算并储存间隔 } int al=end[0]-start[n-1];//长度和因为我们降序排列的所以第一个的end-最后一个的start就是长度和 sort(dis,mmm,n-1);//按照间隔大小降序排序 if(m > n){printf("%d",n);return 0;}//可以不写如果使用的线段数比这个线段数还多的话,那肯定直接输出每个线段的总长度是最短的 int nl=1;//计数器(使用线段) int node=0;//计数器(距离) while (nl<m && dis[node]>0) { nl++; al=al-dis[node]; node++;//再用一个线段将第一个大距离分开使长度最短以此类推达到目的 } printf("%dn",al); } return 0; }

总结: 

1.制定好适合的贪心策略

2.用总长减去使用的距离

3.专心写代码,代码里有注释解析哦!!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYzByZQ==,size_20,color_FFFFFF,t_70,g_se,x_16

Love is worth years.
热爱可抵岁月漫长。

 

 

最后

以上就是酷酷星星最近收集整理的关于区间覆盖问题Love is worth years.❤ 热爱可抵岁月漫长。的全部内容,更多相关区间覆盖问题Love is worth years.❤内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部