您的位置:首页 > 其它

USACO 1.3.1 Mixing Milk (milk)

2011-03-23 20:52 239 查看
1、贪心算法

2、优化解:读入数据时将相同价格合并,计算时不需排序。

/*
ID: gengjia1
LANG: C
TASK: milk
*/
#include <stdio.h>
#include <stdlib.h>
//#define NDEBUG
#include <assert.h>
int N, M;
struct FARMER{
int price;
int amount;
};
int farmercmp(const void *fa, const void *fb)
{
struct FARMER *a, *b;
a = (struct FARMER *)fa;
b = (struct FARMER *)fb;

if(a->price > b->price)
return 1;
if(a->price < b->price)
return -1;
return 0;
}
int main(void) {
FILE *fin = fopen ("milk.in", "r");
FILE *fout = fopen ("milk.out", "w");
struct FARMER *F;
int price = 0;
int ca = 0;
int i;
fscanf (fin, "%d", &N);
assert(N >= 0);
assert(N <= 2000000);
fscanf (fin, "%d", &M);
assert(M >= 0);
assert(M <= 5000);
F  = (struct FARMER *)malloc(M * sizeof(struct FARMER));
for(i = 0; i < M; i++)
{
fscanf(fin, "%d %d", &F[i].price, &F[i].amount);
}
qsort(F ,M, sizeof(struct FARMER), farmercmp);
for(i = 0; i < M && ca < N; i++)
{
ca += F[i].amount;
price += F[i].price * F[i].amount;
}
if(ca > N)
{
price -= (ca - N) * F[--i].price;
}
fprintf(fout, "%d/n", price);
fclose(fin);
fclose(fout);
exit(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: