CodeForces 3B Lorry
2012-11-26 19:14
260 查看
原题链接:http://codeforces.com/problemset/problem/3/B
看了好久才明白题意:有一辆卡车,要装载一些船只,这些船只分为“1”和“2”两种,再给出n只船的类型及其capacity(理解为“价值”会更好),要求给定卡车容量v的情况下求最大装载价值。
理解完题意之后我想是背包问题吧,但是所给v达到10^9。
其实这道题用的是贪心思想。
首先把两种船只分开,分别进行排序。最优解总是先取价值高的。可以O(n)的时间复杂度枚举选择i只“1”船,则选择“2”船只的个数就是min((v - i) / 2, tc),tc为“2”船总个数,后面的处理就不难了。
View Code
看了好久才明白题意:有一辆卡车,要装载一些船只,这些船只分为“1”和“2”两种,再给出n只船的类型及其capacity(理解为“价值”会更好),要求给定卡车容量v的情况下求最大装载价值。
理解完题意之后我想是背包问题吧,但是所给v达到10^9。
其实这道题用的是贪心思想。
首先把两种船只分开,分别进行排序。最优解总是先取价值高的。可以O(n)的时间复杂度枚举选择i只“1”船,则选择“2”船只的个数就是min((v - i) / 2, tc),tc为“2”船总个数,后面的处理就不难了。
View Code
#include <stdio.h> #include <string.h> #include <algorithm> #define FOR(i,s,t) for(int i = (s); i <= (t); i++) const int maxn = 100000 + 5; int sum1[maxn], sum2[maxn], oc, tc, ans[maxn]; struct node { int id; int val; }one[maxn], two[maxn]; bool cmp(node x, node y) {return x.val > y.val;} int main() { int n, v, a, b, maxv, c1, c2; while(scanf("%d%d", &n, &v) != EOF) { oc = tc = 0; FOR(i, 1, n) { scanf("%d%d", &a, &b); if(a == 1) one[++oc].val = b, one[oc].id = i; else two[++tc].val = b, two[tc].id = i; } std::sort(one+1, one + oc + 1, cmp); std::sort(two+1, two + tc + 1, cmp); sum2[0] = sum1[0] = 0; FOR(i, 1, tc) sum2[i] = sum2[i - 1] + two[i].val; FOR(i, 1, oc) sum1[i] = sum1[i - 1] + one[i].val; c1 = -1, c2 = -1, maxv = -1; FOR(i, 0, oc) { if(i > v) break; int d = sum1[i] + sum2[std::min((v - i) / 2, tc)]; if(d > maxv) { maxv = d; c1 = i; c2 = std::min((v - i) / 2, tc); } } if(maxv == -1) { puts("0"); continue; } int cnt = 0; printf("%d\n", maxv); FOR(i, 1, c1) ans[++cnt] = one[i].id; FOR(i, 1, c2) ans[++cnt] = two[i].id; FOR(i, 1, cnt) printf("%d%c", ans[i], i == cnt? '\n' : ' '); } return 0; }
相关文章推荐
- CodeForces 3B Lorry(贪心背包)
- CodeForces 3B Lorry
- codeforces 3B Lorry 贪心
- Codeforces 3B Lorry 贪心
- Codeforces 3B Lorry
- codeforces 3B Lorry
- Codeforces 442C Artem and Array(stack+贪心)
- codeforces 583 D. Once Again... (LIS + 贪心)
- CodeForces 659D Bicycle Race (判断点是否为危险点)
- codeforces - 734E - Anton and Tree(图论 树)
- Codeforces 544D Destroying Roads【思维枚举+最短路】好题~好题!
- CodeForces - 764C Timofey and a tree
- CodeForces 52C Circular RMQ (区间更新线段树)
- Codeforces 584 B. Kolya and Tanya (Codeforces Round #324 (Div. 2))
- Codeforces-Round-#357-(Div.-2)-A-Good-Contest
- codeforces 589 G. Hiring(线段树,好题)
- 【思维 && 构造】CodeForces - 148C Terse princess
- Codeforces 598A Tricky Sum (水)
- Codeforces 444C DZY Loves Colors 水线段树
- Codeforces 584E Anton and Ira