本周学习总结

到了本周对于贪心的课程已经结束,但我在解题时对贪心的使用从不会结束。
1,对贪心的接触
部分的贪心题就是模版式的做法,首先大致读懂题意,浏览本题的输入输出,
就可以想到本题的做法,于是便在代码的开头写一个比较,方便在代码中使用,贪心的绝大多数题是都需要排序的,只有极少部分的题不需要排序。
下面是我在做题时遇到的一个我认为较典型的模板题
D
题意
农民去城里的路上有许多水坑,想要过水坑,必须在水坑上铺上木板,如何在可以顺利通过水坑,但是铺最少的木板
Line 1: Two space-separated integers: N and L

  • Lines 2…N+1: Line i+1 contains two space-separated integers: s_i and e_i (0 <= s_i < e_i <= 1,000,000,000) that specify the start and end points of a mud pool along the road. The mud pools will not overlap. These numbers specify points, so a mud pool from 35 to 39 can be covered by a single board of length 4. Mud pools at (3,6) and (6,9) are not considered to overlap.
  • Sample Input
    3 3
    1 6
    13 17
    8 12
    Sample Output
    5
    要做本题,首先你可以知道这个题是需要排序的,但是做贪心的题时也是需要知道是按前面一列数排序还是按后面一列数排排序 ,本题排序前后都可以,将泥坑离农民家的距离先从小到大的排起来,输入相关数据,起初我自己写这则代码时代码得出来的结果总是需要6个木板,最后发现在经过第二个泥坑时是使用了两个木板,此刻木板的末端延申到了第三个泥坑的位置,将第三个泥坑的起始点从13改到了14,这样使得第三个泥坑使用木板的数量为一块木板
#include <iostream>
#include<algorithm>
#include<cmath>
using namespace std;
struct dd
{
    int s1,s2;
}a[10000];
bool he(dd x,dd y)
{
    return x.s1<y.s1;
}
int main()
{
    int sum,w,i,j,n,l;
    cin>>n>>l;
    for(i=0;i<n;i++)
    {
        cin>>a[i].s1>>a[i].s2;
    }
    sort(a,a+n,he);
    sum=0;w=0;
    for(i=0;i<n;i++)
    {
        if(w>=a[i].s2) continue;
        w=max(w,a[i].s1);
        while(w<a[i].s2)
        {
            w+=l;sum++;
        }
    }
    cout<<sum;
    return 0;
}

本题的难点在于你将木板铺在水坑中时,下一个水坑中的起点是会发生改变的,水坑起点是发生变化的。
在做题时也发现一些不需要通过排序也可以解决的贪心问题
Y
本题作为一个贪心题便没有使用到排序,这是一个酸奶工厂,每天加工需要的价钱不同,可以在加工费少时多加工些,酸奶可以长期保存,但酸奶的存放是收钱的,
我们可以这样想如果想在第一天把第二天的酸奶也加工了,就首先得考虑加工费加上保存费是否多余第二天的加工费
Sample Input
4 5
88 200
89 400
97 300
91 500
Sample Output
126900

#include<iostream>
using namespace std;
int main()
{
int n,m,tt,dd;
long long sum;
while(cin>>n>>m) 
{
int mc=88;
sum=0;
while(n--)
{
cin>>tt>>dd;
mc=min(mc+m,tt);
sum+=mc*dd;
}
cout<<sum<<endl;
}
return 0;
}

本题的变化点在于它的加工费用在变化着,主要考虑前一天的加工费加保存费是否多余后一天的加工费。
2.对贪心的感受
对每道问题在解答时需将问题转化为数据时要抓住重点,大多数贪心问题按照模板式做法便可轻松解答,如果该题考虑的因素过多,不要太强硬考虑每个题中的因素,换换解题思路,找到最优的解题方法才是最好的。
3.对于参加第一次线上规模比赛的感想
同别人一起比赛,一起做同一题,才发现我们的差距,才知道自己知识储备的不足,自己在这方面的水平真的太菜了,做第一道题时是有思路的,但无法写出可以完整运行的代码,自己学的太少了,真做起来考虑因素多的题就不会了,自己今后会多多找些空余时间看算法笔记,奠基一下自己基础知识。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值