永发信息网

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

答案:2  悬赏:70  手机版
解决时间 2021-03-22 00:40
c语言求一升序数组求不超过某数M的最大元素和
最佳答案
#include 
#include 
#include 

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

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

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

比较暴力,没有剪枝
追问- -!忘了说了,是double的数组。。。。大神麻烦改下了⊙﹏⊙‖追答#include 
#include 
#include 

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

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

int main() {
double a[4] = { 1, 2, 5, 8 };
double M = 7;
printf("%d
", maxsum(a, 0, 4, M));
}
全部回答
先找到最后一个不大于M的数。然后从两侧开始,找出两数之和sum≤M的数,如当前值大于之前的sum找将sum重新赋值。追问不是俩数之和,可以随便选数量的。。。比如{1,1,5,8,},M=7,就选1,1,5追答如果只要找一个解还简单,若是找所有那这个就要动态规划了追问求教做人!⊙﹏⊙
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
最近想补钙,想请问哪种钙片比较适合中年妇女
水平面上静止放置一质量为M的木箱,箱顶部和
X299/太南路(路口)怎么去啊,有知道地址的么
从铁岭到开源的火车最早几点的
唐装旗袍定做的店哪里比较多,北京哪一家店做
阿狸旋木花园经典语录,形容美丽花园的句子有
别克凯越为什么突然之间蓄电池内没电流了
第二节、完形填空(共20小题;每小题1分,满
白鲸为什么喜欢听音乐,仓鼠喜欢听歌吗?
益康大药房盐井店地址在什么地方,想过去办事
口头禅中常带“搞”字,比如搞过来,在北方语
2015世界足球教练工资最高是谁
逆战刷永久武器捡宝箱按什么键
多少点卷能抽到韩信,王者荣耀韩信一般多少幸
凯渝酒家在哪里啊,我有事要去这个地方
推荐资讯
妹妹结婚,姐 姐送娶行吗
我老公姓何,我姓段,帮忙取个好听的四字名字
豌豆吃多了有什么坏处
驴肉乳腺癌病人能吃挖?
表达出人头地的诗句,因不能出人头地而十分愤
教育部学历认证2014年最新政策是什么?教育部
cf中你没添加对方好友怎么把他拉黑
两口子感情感慨的句子,夫妻文化衫语录,幸福
杨家院村这个地址在什么地方,我要处理点事
美佳乐便利店在什么地方啊,我要过去处理事情
意思的意思造句,士为知已者死,女为悦己者容
一棵树上能结出不同的果实吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?