贪心算法
Posted blue-lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法相关的知识,希望对你有一定的参考价值。
Date:2019-07-22 19:33:09
总是选择当前最优的策略,来获得全局最优的解
Sample:
1 /*--------------------------区间贪心------------------------*/ 2 /* 3 问题:区间不相交问题 4 问题描述: 5 给出N个开区间(x,y),从中选择尽可能多的开区间,使其两两之间没有交集 6 如(1,3),(4,5),(6,7) 7 贪心解法: 8 若I1被I2包含,则选择I1 9 总是先选择右端点最小,或左端点最大的区间 10 */ 11 12 #include <stdio.h> 13 #include <algorithm> 14 15 using namespace std; 16 17 const int maxn = 110; 18 19 struct Inteval 20 21 int x, y; 22 I[maxn]; 23 24 bool cmp(Inteval a, Inteval b) 25 26 if(a.x != b.x) 27 28 return a.x > b.x; //按左端点由大到小排序 29 30 else 31 32 return a.y < b.y; //左端点相同。则按照右端点从小到大排序 33 34 35 36 int main(void) 37 38 int n; 39 while(scanf("%d", &n), n!=0) 40 41 for(int i=0; i<n; i++) 42 43 scanf("%d %d", &I[i].x, &I[i].y); 44 45 46 sort(I, I+n, cmp); 47 48 int ans = 1; //ans记录区间不相交的个数 49 int last_x = I[0].x; //last_x记录上一个被选中区间的左端点 50 for(int i=1; i<n; i++) 51 52 //if(I[i].y < last_x) 则为区间选点问题 53 if(I[i].y <= last_x) //该区间右端点在last_x左边 54 55 last_x = I[i].x; 56 ans++; 57 58 59 printf("%d\n", ans); 60 61 62 return 0; 63 64
以上是关于贪心算法的主要内容,如果未能解决你的问题,请参考以下文章