BZOJ 2465
-
题目
-
分析
贪心
将小球的分数从大到小排序
将瓶子容积从小到大排序
将球放入瓶子中时遵循尽量找到比小球分数大的瓶子中容积最小的。
-
代码
const int N = 205; int a[N]; struct node { int c; int q; } b[N]; bool cmp(int a, int b) { return a > b; } bool cmp2(node a, node b) { return a.q < b.q; } int main () { //freopen("input.in", "r", stdin); //freopen("test.out", "w", stdout); int n, m; while (~scanf("%d %d", &n, &m)) { if (n == 0 && m == 0) break; for (int i = 1; i <= n; i++) read(a[i]); for (int i = 1; i <= m; i++) { read(b[i].c); read(b[i].q); } sort(a + 1, a + n + 1, cmp); sort(b + 1, b + m + 1, cmp2); int ans = 0; int sum = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (b[j].c && b[j].q >= a[i]) { ans ++; b[j].c --; sum += a[i]; break; } } } cout << ans << " " << sum << endl; } return 0 ; }
-
题型
贪心