Usaco 1.3.2 修理牛棚(Barn Repair)

  Barn Repair

题意:在一个夜黑风高,下着暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚没有住满。 剩下的牛一个紧挨着另一个被排成一行来过夜。 有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 自门遗失以后,农民约翰必须尽快在牛棚之前竖立起新的木板。 他的新木材供应商将会供应他任何他想要的长度,但是供应商只能提供有限数目的木板。 农民约翰想将他购买的木板总长度减到最少。 给出:可能买到的木板最大的数目M(1<= M<=50);牛棚的总数S(1<= S<=200); 牛棚里牛的总数C(1 <= C <=S);和牛所在的牛棚的编号stall_number(1 <= stall_number <= S),计算拦住所有有牛的牛棚所需木板的最小总长度。 输出所需木板的最小总长度作为答案

Input

1 行: M , S 和 C(用空格分开) 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。

Output

单独的一行包含一个整数表示所需木板的最小总长度。

Sample Input

4 50 18

3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43

Sample Output

25

解题思路:

显然每一个牛棚就1块木板这样最省料。但有木板数目的限制,那么就要用1个木板横跨多个牛棚,多出来的长度就是牛棚之间的间隔。换句话说,如果我们能用n块木板,就用n块,少用木板会使最终木板总长度增加。因为要覆盖每个有牛的牛棚,所以要想使覆盖牛棚的木板长度最小,就尽量不要让木板在间隔太大的牛棚之间横跨。我们先忽略1号牛棚和第一个有牛的牛棚之间的间隔,最后面的牛棚也是如此。这样由于要覆盖每个有牛的牛棚,所以n个木板之间会有n-1个间隔。所以先计算出每个有牛的牛棚之间的距离。取其中n-1个最大的,这n-1个间隔会产生n个线段,对应n个木板,且这个n个木板应该是总长度最小的。然后再将1号牛棚和第一个有牛的牛棚之间的间隔以及最后面的牛棚也考虑进去,因为在这些区域覆盖是无意义的,因此最终答案是:总的牛棚长度 - n-1个最大间隔 - 1号牛棚和第一个有牛的牛棚之间的间隔以及最后面的牛棚的间隔。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 using namespace std;
 5 int a[201];
 6 int longs[201];
 7 int main()
 8 {
 9     int n,m,k,p;
10     scanf("%d%d%d",&n,&m,&k);
11     for(int i=0; i<k; i++)
12     {
13         scanf("%d",&a[i]);
14     }
15     sort(a,a+k);
16     for(int i=0; i<k; i++)
17     {
18         longs[i]=(a[i+1]-a[i]-1);
19     }
20     sort(longs,longs+k-1);
21     int ans = 0;
22     for(int i=0; i<n-1; i++)
23         ans+=longs[k-i-2];
24     printf("%d\n",m-ans-(a[0]-1)-(m-a[k-1]));
25     return 0;
26 }
时间: 2024-10-07 14:53:39

Usaco 1.3.2 修理牛棚(Barn Repair)的相关文章

[USACO1.3]修理牛棚 Barn Repair (贪心)

题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,farmer John必须尽快在牛棚之前竖立起新的木板. 他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板. farmer John想将他购买的木板总长度减到最少. 给出:可能买到的木板最大的数目M(1<= M<

洛谷P1209 [USACO1.3]修理牛棚 Barn Repair

题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,farmer John必须尽快在牛棚之前竖立起新的木板. 他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板. farmer John想将他购买的木板总长度减到最少. 给出:可能买到的木板最大的数目M(1<= M<

洛谷——P1209 [USACO1.3]修理牛棚 Barn Repair

https://www.luogu.org/problem/show?pid=1209 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,farmer John必须尽快在牛棚之前竖立起新的木板. 他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板. farmer

洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair

题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,farmer John必须尽快在牛棚之前竖立起新的木板. 他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板. farmer John想将他购买的木板总长度减到最少. 给出:可能买到的木板最大的数目M(1<= M<

P1209 [USACO1.3]修理牛棚 Barn Repair

题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,farmer John必须尽快在牛棚之前竖立起新的木板. 他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板. farmer John想将他购买的木板总长度减到最少. 给出:可能买到的木板最大的数目M(1<= M<

USACO 1.3 Barn Repair

Barn Repair It was a dark and stormy night that ripped the roof and gates off the stalls that hold Farmer John's cows. Happily, many of the cows were on vacation, so the barn was not completely full. The cows spend the night in stalls that are arrang

38 修理牛棚

38 修理牛棚 作者: xxx时间限制: 1S章节: 一维数组 问题描述 : 在一个暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚(牛棚的总数S:1<= S<=200)没有住满. 剩下的牛一个紧挨着另一个被排成一行安置在有屋顶的牛棚来过夜. 所以有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度,且宽度设为1. 因为有些门遗失,农民约翰需要架起新的木板作为门. 他的新木材供应者将会供应他任何他想要的长度,但是供应者只能提供有限数目的木板. 农民约翰想将他购买的木

USACO 1.3 Barn Repair(贪心)

这道题同样也是贪心 要使木板总长度最少,就要使未盖木板的长度最大. 我们先用一块木板盖住牛棚,然后,每次从盖住的范围内选一个最大的空隙,以空隙为界将木板分成两块,重复直到分成m块或没有空隙. /* ID:twd30651 PROG:barn1 LANG:C++ */ #include<iostream> #include<fstream> #include<stdlib.h> //#define DEBUG using namespace std; int M; int

USACO Section1.3 Barn Repair 解题报告

barn1解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 有一列牛棚,编号从1到S,相邻的牛棚紧挨着(间距为0),每个牛棚长度是一个单位. 其中有C头牛,分别在各自的牛棚中,不存在多个牛挤