USACO section1.3 Barn Repair 修理牛棚(贪心)

题目:http://www.wzoi.org/usaco/11%5C304.asp

 

大意:有m个点,用有数量限制的区间把这些点全部覆盖,求区间和的最小值。

 

贪心原理:如果限制的区间数大于等于m的话ans=m(就因为没考虑这点提交了好多次- -|||);否则,先用把点都排序(这里也忘记了- -|||),用标记法记录相邻点的距离,a[i]表示距离为i的个数。。。

每减少一次区间的个数相当于2个区间合并成一个区间,合并的话肯定选距离最小的那个。。。。。把区间个数减到限制的个数为止。。。。。。

 

/*
ID: qiufeih1
PROG: barn1
LANG: C++
*/

#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;

const int INF = 1<<30;

int a[250];
int num[250];

int main()
{
freopen("barn1.in", "r", stdin);
freopen("barn1.out", "w",stdout);
int n, m;
int star, end;
int i, j;
int ans;
int count;
int flag;
int min, max;
int max_num;
scanf("%d%d%d", &max_num, &n, &m);
memset(a, 0, sizeof(a));

for (i = 0; i < m; i++)
{
scanf("%d", num+i);

}

ans = m;
if (max_num < m)//别漏
{
max_num = m - max_num;

sort(num, num+m);//别漏排序
for (i = 1; i < m; i++)
{
a[num[i]-num[i-1]-1]++;//标记距离的个数
}

i = 0;//距离从小到大取。。贪心
while (max_num--)
{
if (a[i])//存在距离为i
{
ans += i;
a[i]--;
}
else
{
while (!a[++i]);
ans += i;
a[i]--;
}
}
}

printf("%d\n", ans);

return 0;
}



转载于:https://www.cnblogs.com/qiufeihai/archive/2012/03/29/2424337.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值