马上就要打CSP了,最近准备刷一刷USACO section1和2,先刷刷section 1练练手吧,保证PJ1=、TG能苟进暴力分。。。
[P1208USACO1.3] 混合牛奶 Mixing Milk 比较简单的贪心题,先对单价排序,如果单价相同对最大产量排序,然后跑一下花费就可以了。
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 2e6 + 100;
ll n, m;
ll ans;
struct node {
ll p, maxt;
} a[MAXN];
bool cmp(node x, node y) {
if(x.p != y.p) return x.p < y.p;
return x.maxt > y.maxt;
}
int main() {
cin >> n >> m;
for(int i=1; i<=m; i++) {
cin >> a[i].p >> a[i].maxt;
}
sort(a+1, a+1+m, cmp);
for(int i=1; i<=m; i++) {
if(a[i].maxt <= n) {
n -= a[i].maxt;
ans += a[i].p*a[i].maxt;
} else {
ans += n*a[i].p;
n = 0;
break;
}
}
cout << ans;
return 0;
}
[P1209 USACO1.3]修理牛棚 Barn Repair 贪心,我刚开始想的是把所有牛所处的牛棚铺个木板,然后贪心地连接,但是相邻的木板处理起来码量稍大,所以可以反过来想,先把所有牛棚覆盖一个大木板,再贪心地断开就可以了,这里只需断开m-1次,因为大木板也算一个木板
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 205;
int m, s, c, a[MAXN], ans;
bool broke[MAXN];
int main() {
cin >> m >> s >> c;
int l = 0x3f3f3f3f, r = 0;
for(int i=1; i<=c; i++) {
cin >> a[i];
l = min(l, a[i]);
r = max(r, a[i]);
}
ans = r - l + 1;
sort(a+1, a+1+c);
for(int i