码迷,mamicode.com
首页 > 编程语言 > 详细

贪心算法

时间:2020-02-05 13:23:10      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:比较   需要   规划   表示   ret   bool   bsp   最小生成树算法   生成树算法   

贪心策略:总是考虑在当前状态下局部最优的策略,一定满足最优子结构,不断地把问题归纳为更小的相似地子问题

拟阵:许多用贪心算法求解的问题,可以表示求带权拟阵的最大权独立子集问题

区间贪心

一、区间不相交问题

总是选择左端点最大的区间

struct node{
	int x,y;
}a[maxn];
bool cmp(node a,node b){
	if(a.x!=b.x) return a.x>b.x;   //先按照左端点从大到小排序 
	else return a.y<b.y;           //不然就是右端点从小到大 
}
sort(a,a+n,cmp);
int ans=1,lastx=a[0].x;
for(int i=1;i<n;i++){
	if(a[i].y<=lastx){
		ans++;
		lastx=a[i].x;
	}
} 

二、区间选点问题

最少确定多少个点,才能使每个闭区间都至少存在一个点,和区间不相交问题一样,只需要改成a[i].y<lastx就可以了

最小生成树算法:常用的是prim和kruskal算法,都是采用了贪心的思想,但是策略不一样。

 

背包问题

一、部分背包问题:可以选择拿一件物品地部分东西,这个完全可以用贪心,选择当前单位价值最大的

二、01背包问题:因为要和选和不选的两种情况比较,所以产生的子问题互为重叠,需要用动态规划

 

贪心算法

标签:比较   需要   规划   表示   ret   bool   bsp   最小生成树算法   生成树算法   

原文地址:https://www.cnblogs.com/shirlybaby/p/12263134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!