题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xpm 的最大值。
解题思路:可以将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;
}