数据加载中……

USACO 1.3.2 Barn Repair

简单的贪心,最初先把每个需要覆盖的点分别覆盖,这时候所需的东东一般会超过给你的东东。
超过多少呢?假设为n吧,这个样你需要选择n个空白档(即已经覆盖的两个牛棚间的空白牛棚)
也把他们覆盖掉,这样每覆盖 一个,n就能减少1,直到n=0就算完成任务。
之所以是贪心,因为我们在选择那n个空白档的时候是从小到大选的。
同样的,也可以用hash的思想精简代码。

 1 /*
 2   ID : 31440461
 3   PROG : barn1
 4   LANG : C++
 5 */
 6 #include <iostream>
 7 using namespace std;
 8 const int MAXS=200+10;
 9 
10 int main()
11 {    
12     freopen("barn1.in","r",stdin);
13     freopen("barn1.out","w",stdout);
14     int m,s,c;
15     cin >> m >> s >> c;
16     bool a[MAXS];
17     memset(a,0,sizeof(a));
18     int x;
19     for (int i=0;i<c;i++) cin >> x, a[x]=1;
20     int cou[MAXS];
21     memset(cou,0,sizeof(cou));
22     x=1;
23     while (!a[x]) x++;
24     for (int i=x+1;i<MAXS;i++)
25        if (a[i]) ++cou[i-x-1], x=i;
26     if (m>=c) { cout << c << endl;return 0;}
27     x=c-m;
28     int ans=0;
29     for (int i=0;i<MAXS;i++)
30     {
31         x-=cou[i];
32         ans+=i*cou[i];
33         if (x<=0) {ans-=(-x)*i;break;}
34     }
35     cout << ans+<< endl;
36     return 0;
37 }
38 
39            
40        
41 


posted on 2009-07-12 13:53 Chen Jiecao 阅读(240) 评论(0)  编辑 收藏 引用 所属分类: USACO


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理