USACO section1.3 Barn Repair 修理牛棚(贪心)
2012-03-29 22:23
393 查看
题目:http://www.wzoi.org/usaco/11%5C304.asp
大意:有m个点,用有数量限制的区间把这些点全部覆盖,求区间和的最小值。
贪心原理:如果限制的区间数大于等于m的话ans=m(就因为没考虑这点提交了好多次- -|||);否则,先用把点都排序(这里也忘记了- -|||),用标记法记录相邻点的距离,a[i]表示距离为i的个数。。。
每减少一次区间的个数相当于2个区间合并成一个区间,合并的话肯定选距离最小的那个。。。。。把区间个数减到限制的个数为止。。。。。。
大意:有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; }
相关文章推荐
- 【动态规划】[luoguP1209 USACO1.3]修理牛棚 Barn Repair
- USACO-Section 1.3 Barn Repair(贪心)
- 修理牛棚 Barn Repair【USACO1.3】(提高组)
- USACO1.3]修理牛棚 Barn Repair
- 【贪心】洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair
- 【动态规划】Barn Repair 修理牛棚 (Usaco_Training 1.3)
- 【动态规划】Barn Repair 修理牛棚 (Usaco_Training 1.3)
- 【USACO】【贪心】Section1.3 Mixing Milk 题解
- P1209 [USACO1.3]修理牛棚 Barn Repair
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
- USACO-Section1.3 Barn Repair【贪心算法】
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
- USACO-Section1.3 barn1[贪心]
- USACO section1.3 Barn Repair
- USACO1.3 修理牛棚 Barn Repair
- USACO Section1.3 Barn Repair 解题报告
- 一大堆的福利之【USACO题库】Barn Repair修理牛棚
- USACO-Section 1.3 Barn Repair[...]
- 【USACO题库】1.3.2 Barn Repair修理牛棚
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair