ACM第二周学习总结(贪心算法)

第二周学习总结(贪心算法)

周末总结:
将大问题分解,寻找局部最优。贪心问题是通过局部最优找到全局最优的问题,而动态规划问题不可用局部最优来达到实现全局最优的目的。

解决问题寻找正确思路的过程,在不知道正确思路快速解答的情况下,先进行模拟,将整个过程代码实现,再进行优化,可以尝试将复杂的条件删除或取代,先将大一点的条件代码实现再逐步细化,优化解题过程。

贪心和动态规划的区别:贪心是局部最优,但不一定能推出全局最优,是自顶而下实现,而动归是是自底而上,是全局的最优解,将各个解记录比较找到最优解。

最优装载问题,尽可能多的将物品装船,将轻者先装,需要升序排列,依次装船,记录剩余体积小则停止。背包问题,如果按价值从大到小,则可能因重量太大装的太少导致价值小,如果按重量由小到大,装的较多但价值不一定最大,单位重量的价值则将两个限制条件结合,就是所谓的按性价比排序。

区间问题 ,工作区间调度,还是寻找最少重复两个区间两个以上元素的集合,通常需要进行标记收尾区间元素,还有一类区间问题需要记录整个区间,一个走廊搬物品,找到重叠最多的重叠次数即为最少需要的次数。泥坑铺板问题,标记尾部,指针的功能不断加+长度L,与走廊搬物品不同的是,不可以同时进行所以只需要标记尾部即可。做题时避免一概而论,不能简单认为区间问题标记即可,打破固化思维,即使是贪心一类问题也需要,一步一步分析由简及繁实现。

贪心问题通常用到结构体排序,一种是可以bool cmp,需要用sort函数,头文件。另一种是结构体内嵌重载运算符函数。

struct A{
int a,b;
    bool operator <(const A x)const {
    return b<=x.b;
    }
}aa[1001];

贪心问题的排序也不只有一种,就有很多不走寻常路,所以不能固化思维,保护flowers,先假设只有两头牛先后吃花来实现代码,再找到规律实现整体。

{/*(a,b) (c,d)
交换(c,d) (a,b)
假设在这之前FJ已经花了x时间了。
那么赶完这两头牛的损失的量就分别为
c1=x★b + (x + a )★d;
交换 c2=x★d +(x + c)★b;
两者做差,排序 */
struct node
{
    int x, y;
}a[MAXN];
int n;
bool cmp(node x, node y)
{
    return x.x * y.y < x.y * y.x;
}

贪心问题用未必只能数组实现,两物体碰撞合成一个物体priority_queue q;可实现直接将结构体数据从大到小排序的效果,需要注意的是优先队列没有back()操作。

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素

//结构体要有重载,不然报错
struct Node{
    double val;
    bool operator<(const Node &a)const
    {
        return val<a.val;
    }
}; 

// n次计算
for(int i=1; i<n; i++) 
 {
      double a=q.top().val;
      q.pop();
      double b=q.top().val;
      q.pop();
      node.val=2*sqrt(a*b);
      q.push(node); 
 } 
 cout<<fixed<<setprecision(3)<<q.top().val<<endl;
    q.pop();//删除对首,起到清空的作用,因为此时只有队首元素

最后
对题解的纠正到位,不能简单认为是什么问题,必须实践。遇到问题及时解决,需要课后优先回顾总结。要转变自己的态度,做题后纠错总结,AC不是最终目的。做题时,需要打破固有思维,不要尝试套类型题的思路,一步一步分析最重要,耐心,付出,加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值