学贪心,首先要知道的这是一种策略,而不是算法
————————————————————————————
贪心:
贪心没有固定的算法框架,它在不同的题目中出现的形式都是不一样的。但是它算法设计的关键是贪心策略的选择。也就是说想要贪心,你就得从题目的某个条件为基础,根据这个条件选择如何能得到局部的最优解。
思路:
1、看看这道题能不能用贪心
2、选择贪心的标准
3、根据标准把求解的问题分成若干个子问题
4、对每一个子问题求解,得到子问题的局部最优解
5、把每个子问题的解局部最优解
其实贪心也不是很难啦,只要懂这些概念相信就不难,下面给一道例题
————————————————————————————
题目简述:农夫有一个长为S(1 <=S < 2,000,000,007)的书架,同时他又有n头奶奶牛,第i头奶牛的长度为h_i。他想利用这n只奶牛通过“叠罗汉”的方式叠成一座奶牛塔直至书架的顶端,问最少叠几只奶牛能够到达书架的顶端。(保证有解)
————————————————————————————
这道题思路很简单,只要从大到小排序,然后再叠塔就万事大吉
————————————————————————————
代码
#include<bits/stdc++.h>
using namespace std;
int nainiuta[20001],x,y,sum=0;//设置这么一个变量名,纯属多余,我只是方便看而已,切勿学习
bool cmp(int a,int b){return (a>b);}
int main(){
cin>>x>>y;
for (int i=1;i<=x;i++)
cin>>nainiuta[i];
sort(nainiuta+1,nainiuta+x+1,cmp);
for(;y>0;)
y-=nainiuta[++sum];
cout<<sum;
return 0;
}
贪心就差不多到这了,要是有不理解的,发我邮箱@1419036629@qq.com