2 条题解

  • 2
    @ 2022-10-04 20:18:31

    老八题解加 \(\LaTeX、\TeX、\KaTeX\) 版:

    #include<bits/stdc++.h>
    using namespace std;
    int a[210],b[210];
    bool cmp(int a,int b) //从大到小排序
    {
    return a>b;
    }
    int main()
    {
    int m,s,c,sum=0,i;
    cin>>m>>s>>c;
    for(i=1;i<=c;i++) //先输入c只牛所在牛棚的编号
    {
    cin>>a[i];
    }
    sort(a+1,a+c+1); //按牛棚从小到大排序
    for(i=1;i<=c-1;i++) //贪心策略,减掉牛棚空隙最大的,因此牛棚空隙存放在b数组里面
    {
    b[i]=a[i+1]-a[i]-1; //牛棚的间隙等于后一个编号减去前一个编号再减1,例如3号牛棚跟4号牛棚的间隙是(4-3-1=0)而不是(4-3=1)。这一点很容易出错!
    }
    sort(b+1,b+c,cmp); //牛棚的间隙按从大到小排序
    sum=a[c]-a[1]+1; //sum代表从第一个牛棚拦到最后一个牛棚,即从1号拦到43,为(43-1+1=43),到底加1还是减1搞清楚他!!!
    if(m>=c) cout<<c; //特殊情况,木板比牛还多,那么每个牛一个木板,输出c即可
    else
    {
    for(i=1;i<=m-1;i++) //贪心策略,因为最多m块木板,因此最多可以有m-1个空隙,如何使得木板最少呢,那就必须m-1个空隙尽可能的大,因此减去m-1个最大的空隙,留下来的值就是最优解
    {
    sum=sum-b[i];
    }
    cout<<sum;
    }
    return 0;
    }
    
  • 1
    @ 2022-10-02 11:04:30

    #include<bits/stdc++.h>
    using namespace std;
    int a[210],b[210];
    bool cmp(int a,int b) //从大到小排序
    {
    return a>b;
    }
    int main()
    {
    int m,s,c,sum=0,i;
    cin>>m>>s>>c;
    for(i=1;i<=c;i++) //先输入c只牛所在牛棚的编号
    {
    cin>>a[i];
    }
    sort(a+1,a+c+1); //按牛棚从小到大排序
    for(i=1;i<=c-1;i++) //贪心策略,减掉牛棚空隙最大的,因此牛棚空隙存放在b数组里面
    {
    b[i]=a[i+1]-a[i]-1; //牛棚的间隙等于后一个编号减去前一个编号再减1,例如3号牛棚跟4号牛棚的间隙是(4-3-1=0)而不是(4-3=1)。这一点很容易出错!
    }
    sort(b+1,b+c,cmp); //牛棚的间隙按从大到小排序
    sum=a[c]-a[1]+1; //sum代表从第一个牛棚拦到最后一个牛棚,即从1号拦到43,为(43-1+1=43),到底加1还是减1搞清楚他!!!
    if(m>=c) cout<<c; //特殊情况,木板比牛还多,那么每个牛一个木板,输出c即可
    else
    {
    for(i=1;i<=m-1;i++) //贪心策略,因为最多m块木板,因此最多可以有m-1个空隙,如何使得木板最少呢,那就必须m-1个空隙尽可能的大,因此减去m-1个最大的空隙,留下来的值就是最优解
    {
    sum=sum-b[i];
    }
    cout<<sum;
    }
    return 0;
    }

  • 1

[USACO1.3]修理牛棚 Barn Repair

信息

ID
1355
难度
6
分类
(无)
标签
递交数
3
已通过
2
通过率
67%
上传者