作业帮 > 综合 > 作业

c语言求一升序数组求不超过某数M的最大元素和

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/08/13 22:32:40
c语言求一升序数组求不超过某数M的最大元素和
比如{1,2,5,8},不超过M=7的最大和为2+5=7,该怎么实现?每个数最多用一次
c语言求一升序数组求不超过某数M的最大元素和
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int max(int a, int b) {
\x05return a > b ? a : b;
}

int maxsum(int array[], int index, int num, int M) {
\x05if (M == 0) return 0;
\x05if (index == num) return 0;
\x05if (array[index] > M) return 0;
\x05if (array[index] == M) return M;
\x05return max(maxsum(array, index + 1, num, M), array[index] + maxsum(array, index + 1, num, M - array[index]));
}

int main() {
\x05int a[4] = { 1, 2, 5, 8 };
\x05int M = 7;
\x05printf("%d\n", maxsum(a, 0, 4, M));
}
 
比较暴力,没有剪枝
再问: - -!忘了说了,是double的数组。。。。大神麻烦改下了⊙﹏⊙‖
再答: #include <stdio.h>
#include <stdlib.h>
#include <math.h>

double max(double a, double b) {
\x09return a > b ? a : b;
}

double maxsum(double array[], int index, int num, double M) {
\x09if (M == 0) return 0;
\x09if (index == num) return 0;
\x09if (array[index] > M) return 0;
\x09if (array[index] == M) return M;
\x09return max(maxsum(array, index + 1, num, M), array[index] + maxsum(array, index + 1, num, M - array[index]));
}

int main() {
\x09double a[4] = { 1, 2, 5, 8 };
\x09double M = 7;
\x09printf("%d\n", maxsum(a, 0, 4, M));
}