从给定的N个正数中选取若干个数之和最接近M
来源:互联网 发布:认证发票用什么软件 编辑:程序博客网 时间:2024/04/29 18:59
解法:转换成01背包问题求解,从正整数中选取若干个数放在容量为M的背包中。
可以用01背包的一维数组进行求解。
程序代码:
#include<stdio.h>const int MAX=100;int f[MAX];int g[MAX][MAX];void SumToM(int *value,int N,int M){ int i; int v; for(i=0;i<N;i++) { for(v=M;v>=value[i];v--) { if(f[v]<f[v-value[i]]+value[i]) { f[v]=f[v-value[i]]+value[i]; g[i][v]=1; } else { f[v]=f[v]; g[i][v]=0; } } } printf("最接近%d的和为%d\n",M,f[M]); i = N; //输出解 v = M; while(i-- > 0) { if(g[i][v] == 1) { printf("%d, ",value[i]); v -= value[i]; } } printf("\n");}int main(){ int M; int value[] = {2,9,5,7,4,11,10}; printf("请输入要求的M的值\n"); scanf("%d",&M); int N = sizeof(value)/sizeof(value[0]); SumToM(value,N,M); return 0;}
1 0
- 从给定的N个正数中选取若干个数之和最接近M
- 面试题:从给定的N个正数中选取若干个数之和最接近M
- 从给定的N个正数中选取若干个数之和最接近M
- 面试题:从给定的N个正数中选取若干个数之和最接近M
- 给定的N个正数中选取若干个数之和最接近M
- 从给定的N个正数中选取若干个数之和为M
- 搜狗面试题:从N个正实数中选若干个数之和最接近M的递归实现
- N个正数选取若干个数之和最接近M
- OC----从N个数中选取M个数的组合
- 从n个数中选取m个数的所有组合
- 从[0,n)中选取不重复的m个数
- 打印从n个数中选取m个数的组合数
- 打印从n个数中选取m个数的组合数
- 等概率无重复的从n个数中选取m个数
- 等概率无重复的从n个数中选取m个数
- 递归实现 从n个数中选取m个数的所有组合
- 等概率无重复的从n个数中选取m个数
- 动态规划实现:给定整数m , 取若干个1到n的整数可求和等于整数m,编程求出所有组合的个数。
- 在图像需要位置画方框_opencv(1)
- 物体的移动方式(转载)
- 云计算设计模式翻译(二):Circuit Breaker Pattern(断路器模式)
- Mysql中自增字段(AUTO_INCREMENT)的一些常识
- Ubuntu 学习笔记之二
- 从给定的N个正数中选取若干个数之和最接近M
- 本地硬盘安装win7/XP系统详细[图解教程]
- hdu 5612 Jump and Jump
- 【VB.NET】-.NET Framework 和 .NET 特点
- Excel表格的35招必学秘技,必看!
- OpenMP并行数目与并行体对运行效率的影响
- windows 控制台下运行cl命令
- POJ 1062 - 昂贵的聘礼(最短路`dijkstra)
- 云计算设计模式翻译(三):Compensating Transaction Pattern(事务修正模式)