2 条题解
-
0Guest LV 0 MOD
-
2
老八题解加 \(\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
#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
信息
- ID
- 1355
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 4
- 已通过
- 2
- 通过率
- 50%
- 上传者