贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是针对每一步做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终能得到问题的最优解,最终得到贪心的每一步的通用最优解。
!这题为了求出两个电池曹怎么最大时间利用首先排序,乍一看觉得很复杂,后来发现只要最后一个电池的使用时长小于前面电池之和就可以有理想情况全部电池之和除以2.](https://img-blog.csdnimg.cn/20200314100447511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x4ZGRkZGFz,size_16,color_FFFFFF,t_70)
![这题的贪心思想就是每一步都尽量得到更高的分数,得到更高分数的同时又可以用更小的代价赢。所以具体实现的时候就是先排序,依次比较,先把能赢的赢了再平局再输。求最小值我偷了个懒。换了两个序列求另一个序列的最大值,那么我们要求的序列就是最小的了`#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int a[1100],b[1100];
int n,i,j,k,sum=0,summ;
int vis[1100];
while(cin>>n){
sum=0;
summ=0;
memset(vis,0,sizeof(vis));
for(i=0;i>b[i];
for(i=0;i>a[i];
sort(a,a+n);
sort(b,b+n);
j=0;
for(i=0;ib[j])
{
vis[i]=1;
sum+=3;
j++;
}
}
for(i=0;ib[j])
{
vis[i]=1;
summ++;
j++;
}
}
for(i=0;i
}`](https://img-blog.csdnimg.cn/20200314100854461.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x4ZGRkZGFz,size_16,color_FFFFFF,t_70)
整体来说在家里还是有点懒散,很多时候不能很专注的投入写代码。贪心算法博大精深,还是要多看,多写。努力感悟这个算法,熟练掌握这个思想。