本题利用贪心算法即可求解。贪心策略:优先取单价最低的,直到数量足够。
代码如下:
/*
ID: michael139
LANG: C
PROG: milk
*/
#include<stdio.h>
#include<string.h>
typedef struct {
int p,a;
} Farmer;
Farmer f[5050],temp;
int main () {
FILE *fin = fopen("milk.in", "r");
FILE *fout = fopen("milk.out", "w");
int n,m,i,j,ans;
while (fscanf(fin,"%d%d",&n,&m) != EOF) {
for (i=1;i<=m;i++) fscanf(fin,"%d%d",&f[i].p,&f[i].a);
for (i=1;i<=m;i++) {
for (j=i+1;j<=m;j++) {
if (f[i].p>f[j].p) {
temp = f[i];
f[i] = f[j];
f[j] = temp;
}
}
}
ans = 0;
for (i=1;i<=m;i++) {
if (f[i].a<=n) {
ans += f[i].a*f[i].p;
n -= f[i].a;
if (n==0) break;
} else {
ans += n*f[i].p;
break;
}
}
fprintf(fout,"%d\n",ans);
}
return 0;
}