我需要在我提出的粗略解决方案背后的逻辑/理念。
问题是:
给定N,其中1<=N<=1000000
现在我需要找到两个数字p和q,使p + q = N && p * q = maximum.
我选择使用这个(((N+1)/2)*((N/2)));
,它基本上给了我最小总和的最大产品。但我对这种逻辑的证明感兴趣。
任何帮助或潜在客户?
#include<stdio.h>
typedef unsigned long uint;
unsigned long calc(uint);
int main(void) {
short i = 0;
uint k = 0;
scanf("%i", &i);
while(i--) {
scanf("%lu", &k);
printf("%lu\n", calc(k));
}
return 0;
}
uint calc(uint k){
return (((k+1)/2)*((k/2)));
}
答案 0 :(得分:3)
让
f(p) = p * (N - p) = p * N - p ^ 2
然后:
f'(p) = N - 2 * p
f''(p) = - 2
自f''(p) < 0
以来,只需求解f'(p) = 0
即可获得本地最大值。
When f'(p) = 0,
p = N / 2
=> q = N / 2
您还需要测试端点f(0)
和f(N)
,但这两个端点都评估为零,因此我们的最大值是全局最大值。
注意:这基本上是说在某个周长的所有矩形中,正方形的面积最大。