赞
踩
目录
题目描述:
这类题目大概就是说这里有一群孩子,还有一堆饼干,每个孩子都很饿,如果饼干大小大于等于这个小孩的饿度,那么这个小孩就可以吃饱(n个小孩,m个饼干),现在让我们输出我们最多能让多少个孩子吃饱。
这里开两个数组,a数组用来存小孩的饿度,b用来存每个饼干的大小。
解题思路就很明显是贪心的思想:我们要想办法先填报饿度最小的孩子,这样一直考虑当前情况最优解,之后得出全局的最优解,这样我们才能够让更多的孩子吃饱。
所以首先我们对a,b两个数组进行排序,接下来用两个变量去移动,如果第一个饼干填不饱第一个小孩的肚子,就让b数组的变量+1,一直往后面推,如果a[i]<=b[j],那么说明可以填饱当前这个小孩的肚子,sum++.
所以实现的代码如下:
#include<bits/stdc++.h> const int N=1e5+10; int a[N],b[N]; using namespace std; int main() { int n,m; cin>>n>>m; for(int i=0; i<n; i++) cin>>a[i]; for(int i=0; i<m; i++) cin>>b[i]; sort(a,a+n); sort(b,b+m); long long sum=0; for(int i=0,j=0; j<m&&i<n;) { if(a[i]<=b[j]) sum++,i++,j++; else j++; } cout<<sum<<endl; return 0; }
给定多个区间(就是类似于那种时间安排的问题,给定很多段时间,然后参加尽量多的活动),计算让这些区间互不重叠的所需要移除区间的最小个数,起止相连不算重叠。
所以我们这里其实要用到贪心思维,如果这个区间的结束段越小,那么他留给其他端的时间就会越多,那我们就对输入的这些时间段的结束时间进行排序,每次选择结尾小,而且与前面区间不重叠的区间。
自己敲了一小段代码,来解决这个问题,如下:
#include<iostream> #include<algorithm> #include<iomanip> const int N=1e5; using namespace std; struct node{ int s; int e; }t[N]; bool cmp(const node &a,const node &b) { return a.e<b.e; } int main() { int n,ans=0,end; cin>>n; for(int i=0; i<n; i++) cin>>t[i].s>>t[i].e; sort(t+0,t+n,cmp);//这里用到了结构体排序; end=INT_MIN;//开一个变量来存动态的结束; for(int i=0;i<n;i++) { if(t[i].s>=end) { ans++; end=t[i].e; } } cout<<ans<<endl; return 0; }这里就是用前一个区间的结束首先作为end,之后,如果下一段的起始满足比这个end要大(也就是保证这个区间不会覆盖住),再把它更新成为下一个区间的结束。
题目意思描述:给定一个数组,他的第i个元素是一只股票第i天的价格。设计一个算法来计算你所能获取的最大利润,你可以尽可能地完成更多的交易(多次买卖一只股票)
注意:你不能同时参与多笔交易,你必须在再次购买之前卖掉之前买的股票。
输入:[7,1,5,3,6,4];
输出:7
就是她第二天1块钱买入,第三天5块钱卖出,sum+=5-1;之后第四天买,第五天卖出,sum+=6-3,最后一天再买肯定会亏,所以sum最大就是7块钱。
那么这一题的解题思想就说,只要我今天买了,明天卖出去我不亏那我就买,不然我就不买1,有这样的局部最优解,来推及全局的最优解
代码如下:
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N]; int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; long long p=0; for(int i=0;i<n-1;i++) { if(a[i]<a[i+1]) p+=a[i+1]-a[i]; } cout<<p<<endl; }
如何判断一个题目是否可以使用贪心算法?
1.最优子结构,它可以逐步由局部的最优解,慢慢退,然后可以得出全局的最优解。
2.贪心选择性质,很大的一个特点就是当前选择的方案,对后面做选择没有影响。不像背包问题,背包的容量是固定的,如果我选择了最大的价值的物品,但是他很占空间,这就可能导致我后面的价值中等,重量小的物品放不下的情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。