uva 1319 Maximum(贪心)

题目连接:2911 - Maximum


题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xp的最大值。


解题思路:可以将x1 + x2 +...+ xm = b *  两端同时乘以根号a去计算。然后按照贪心的思想去计算,注意最后如果有剩1/√a,那么除了一个为正,其他全用负数去抵消。


#include <stdio.h>
#include <string.h>
#include <math.h>

int main () {
	int m, p, a, b;
	while (scanf("%d%d%d%d", &m, &p, &a, &b) == 4) {
		int l = 0, r = 0;
		int tmp = a * b;
		for (int i = 1; i < m; i++) {
			if (tmp >= a) {
				r++;
				tmp -= a;
			} else {
				l++;
				tmp++;
			}
		}

		double sum = l / pow(sqrt(a), p) + r * pow (sqrt(a), p);
		sum += pow(tmp/sqrt(a), p);
		printf("%d\n", (int)(sum + 0.5));
	}
	return 0;
}

你可能感兴趣的:(uva 1319 Maximum(贪心))