ZOJ-1409

来源:互联网 发布:网络教育已成现实 编辑:程序博客网 时间:2024/05/16 12:47

题目看了半天,大意就是每组必须选一个带宽,然后分子是这些带宽的最小值,分母是这些带宽的价格总和,求这个比例的最大值。。我是用比较暴力的方法算的,看题解说是归为贪心的范畴,看不出来和贪心有什么联系,可能是我对贪心没概念。。

#include<stdio.h>#include<limits.h>static int n, band[100][100], price[100][100], size[100];static int total_price(int index, int b, int p){int i, j, sum = p;for (i = 0; i < n; i++){if (i == index)continue;int minp = INT_MAX;for (j = 0; j < size[i]; j++)if (band[i][j] >= b && price[i][j] < minp)minp = price[i][j];sum += minp;}return sum;}int main(){int t;scanf("%d", &t);while (t--){scanf("%d", &n);int i, j, minmaxband = INT_MAX;for (i = 0; i < n; i++){scanf("%d", &size[i]);int maxband = -1;for (j = 0; j < size[i]; j++){scanf("%d %d", &band[i][j], &price[i][j]);if (band[i][j] > maxband)maxband = band[i][j];}if (maxband < minmaxband)minmaxband = maxband;}int tp;double bp = 0, temp;for (i = 0; i < n; i++)for (j = 0; j < size[i]; j++)if (band[i][j] <= minmaxband){tp = total_price(i, band[i][j], price[i][j]);temp = band[i][j] / (double) tp;if (temp > bp)bp = temp;}printf("%.3lf\n", bp);}return 0;}


0 0
原创粉丝点击