HDU 1009

来源:互联网 发布:淘宝达人有什么用 编辑:程序博客网 时间:2024/05/28 04:53

题目描述:

        HDOJ 1009

分析:

        最简单的贪心算法的应用。
        由于可以购买一个房间中的部分JavaBeans,直接将所有的JavaBeans按单价由高到低排序,然后贪心购买即可。最后购买的那个房间可能只购买其中的一部分JavaBeans。

源码:

#include <stdio.h>void bubbleSort(float price[], int J[], int F[], int N);main(){int M, N;int J[1000], F[1000];    //JavaBeans和cat food的重量float price[1000];       //JavaBeans的单价scanf("%d%d", &M, &N);float result;while (!(M==-1 && N==-1)){for (int i = 0; i < N; i ++){scanf("%d%d", &J[i], &F[i]);price[i] = (float)F[i] / (float)J[i];}//按单价由低到高对所有仓库进行排序bubbleSort(price, J, F, N);int sumF = 0, sumJ = 0;for (int i = 0; i < N; i ++)sumF = sumF + F[i];for (int i = 0; i < N; i ++)sumJ = sumJ + J[i];//如果cat food足够多,则可以买下全部的JavaBeansif (M >= sumF)result = sumJ;//cat food只能买一部分仓库中的JavaBeans,贪心购买else{result = 0;int i = 0;while (M > 0){if (M > F[i]){result = result + J[i];M = M - F[i];i ++;}else{result = result + (float)M / (float)F[i] * (float)J[i];M = 0;}}}printf("%.3f\n", result);scanf("%d%d", &M, &N);}}void bubbleSort(float price[], int J[], int F[], int N){float floatTemp;int intTemp;for (int i = 0; i < N-1; i ++){for (int k = N-1; k > i; k --){if (price[k] < price[k-1]){floatTemp = price[k];price[k] = price[k-1];price[k-1] = floatTemp;intTemp = J[k];J[k] = J[k-1];J[k-1] = intTemp;intTemp = F[k];F[k] = F[k-1];F[k-1] = intTemp;}}}}


原创粉丝点击