这题是我们学校从USACO盗的,正所谓洋为我用。
还有就是我发现C++博客挺快的,比其它网快多了。
算法:
1,首先把两头没牛的删去,这样所有有牛的都在i,j的范围内
2,计算间隔的个数cnt_val并按大小排序,牛群的个数cnt_cows等于间隔个数加1,所谓牛群就是一片一片的牛的个数,比如5 6 7三个都有牛,算一个群
3,比较,如果牛群个数小于m,直接输出牛的个数(不是牛群)
如果牛群大于M
{length=j-i+i;(整个范围)
首先,用一快木板把所有的牛都覆盖了
* 如果木板有剩余,加一块木板,然后length减去最大的间隔;
*共执行m-1次
}
题目地址:
http://icpc.ahu.edu.cn/AOJ/showproblem?problem_id=1187 代码:
1
#include<iostream>
2
#include<algorithm>
3
#include<vector>
4
#include<string.h>
5
using namespace std;
6
int main()
7

{
8
int a[205];
9
int b[205];
10
memset(b,0,205*sizeof(int));
11
memset(a,0,205*sizeof(int));
12
int i, m,s,c,ival,j,length,cnt_cows,cnt_val,cnt,p;
13
cin>>m>>s>>c;
14
for(i=1;i<=c;i++)//下标从1开始
15
{
16
cin>>ival;
17
a[ival]=1;
18
}
19
i=1;
20
while(a[i]==0)
21
i++;//牛的起始下标
22
j=s;
23
while(a[j]==0)
24
j--;//牛的终止下标
25
p=1;
26
for(int k=i+1;k<=j;)
27
{
28
cnt=0;
29
if(a[k]==1)
30
k++;
31
if(a[k]==0&&a[k-1]==1&&k<=j)
32
{
33
while(a[k]==0)
34
{cnt++;k++;}
35
if(cnt!=0)
36
b[p++]=cnt;
37
}
38
}
39
p=p-1;//p为间隔数
40
cnt_val=p;
41
cnt_cows=cnt_val+1;
42
sort(b+1,b+1+p);
43
length=j-i+1;
44
if(cnt_cows<=m)
45
cout<<c<<endl;
46
else
47
{
48
for(int q=1;q<=m-1;++q)
49
length-=b[p--];
50
cout<<length<<endl;
51
}
52
53
return 0;
54
}