主要总结规律:动态规划法。
(1) N < = 6, 最大数目为 N;
(2) N >6的时候分别计算 ret(j-k)*(k-1)的最大值, ret[j] > ret[j-1]。
参看红色部分的逻辑。
int maxA(int N) {
if(N <= 0)
return 0;
if(N <= 3)
return N;
vector<int> ret(N+1,0);
ret[0] = 0;
for(int i=0;i<=3;i++) {
ret[i] = i;
}
for(int i=7;i<=N;i++) {
int num = INT_MIN;
int k = 3;
for(int j=i-k;j>=1;j--) {
int tmp = ret[j]*(k-1);
if(tmp > num)
num = tmp;
if(tmp < ret[i-1])
break;
k++;
}
ret[i] = num;
}
return ret[N];
}