P1181 数列分段Section I
.
是真的水题
#include <iostream>
using namespace std;
int main()
{
int n, m, cnt = 1;
cin >> n >> m;
int *a = new int [n+1], *b = new int [n+1];
b[0] = 0;
for(int i = 1; i <= n; ++i) {
b[i] = 0;
cin >> a[i];
b[i] = b[i-1] + a[i];
if(b[i] > m) {
b[i] = a[i];
cnt++;
}
}
cout << cnt;
}
/*
5 6
4 2 4 5 1
*/
混喝牛奶
.
#include <iostream>
#include <algorithm>
using namespace std;
int *a;
bool cmp(int x, int y)
{
return a[x] < a[y];
}
int main()
{
int m, n;
int *b = new int [n], *c = new int [n];
a = new int [n];
cin >> m >> n;
for(int i = 0; i < n; ++i) {
cin >> a[c[i] = i] >> b[i];
}
sort(c, c+n, cmp);
int mon = 0;
for(int i = 0; m > 0; ++i) {
if(m >= b[c[i]]) {
mon += a[c[i]] * b[c[i]];
m -= b[c[i]];
} else {
mon += a[c[i]] * m;
m = 0;
}
}
cout << mon;
}