[编程题] 求正数数组的最小不可组成和
来源:互联网 发布:千里眼淘宝插件手机版 编辑:程序博客网 时间:2024/04/27 05:00
给定一个全是正数的数组arr,定义一下arr的最小不可组成和的概念: 1,arr的所有非空子集中,把每个子集内的所有元素加起来会出现很多的值,其中最小的记为min,最大的记为max; 2,在区间[min,max]上,如果有一些正数不可以被arr某一个子集相加得到,那么这些正数中最小的那个,就是arr的最小不可组成和; 3,在区间[min,max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max+1是arr的最小不可组成和; 举例: arr = {3,2,5} arr的min为2,max为10,在区间[2,10]上,4是不能被任何一个子集相加得到的值中最小的,所以4是arr的最小不可组成和; arr = {3,2,4} arr的min为2,max为9,在区间[2,9]上,8是不能被任何一个子集相加得到的值中最小的,所以8是arr的最小不可组成和; arr = {3,1,2} arr的min为1,max为6,在区间[2,6]上,任何数都可以被某一个子集相加得到,所以7是arr的最小不可组成和; 请写函数返回arr的最小不可组成和。
背包问题
class Solution {public: /** * 正数数组中的最小不可组成和 * 输入:正数数组arr * 返回:正数数组中的最小不可组成和 */ int getFirstUnFormedNum(vector<int> arr, int len) { set<int> S; vector<int> tmp; int mi = 0x7fffffff; for(int i = 0; i < len; ++i) { if(arr[i] < mi) mi = arr[i]; for(set<int>::iterator it = S.begin(); it != S.end(); ++it) tmp.push_back(*it + arr[i]); for(unsigned int i = 0; i < tmp.size(); ++i)S.insert(tmp[i]); S.insert(arr[i]); tmp.clear(); } for(int i = mi; ; ++i) if(S.find(i) == S.end()) return i; return -1; }};
0 0
- [编程题] 求正数数组的最小不可组成和
- 求正数数组的最小不可组成和
- 正数数组的最小不可组成和
- 求正数数组的最小不可组成和(近似背包问题)
- 其他题目---正数数组的最小不可组成和
- 正整数数组的最小不可组成和
- 【数组】【DP】数组的最小不可组成和
- 用matlab求计算机所能表示的最大正数和最小正数
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 一个整形数组中有正数也有负数, 数组中连续一个或多个组成子数组,每个子数组都有一个和, 求所有子数组中和的最大值
- 求数组(只有正数)中元素和为K的最长子数组的长度
- 一个数组 里面正数和负数求所有子数组的最大值
- 416. Partition Equal Subset Sum 类似最小不可组成和
- 输入整形数组,数组里有正数也有负数,数组中一个或连续的多个整数组成数组的子数组,求所有子数组中和的最大值 ,例如输入的数组为{1,-2,3,10,-4,7,2,-5}和最大的子数组为{3,10,
- 求数组(元素可为正数、负数、0)的最大子序列和
- 求数组(元素可为正数、负数、0)的最大子序列和,
- 求数组(元素可为正数、负数、0)的最大子序列和。
- 数据库第四章作业
- 显示Intent,隐式Intent
- 2015年蓝桥杯省赛B组第7题--牌型种数
- java 内存分配及变量存储位置
- Linux安装php Memcached和pcntl扩展
- [编程题] 求正数数组的最小不可组成和
- VS2010的MFC动态创建菜单
- IOC之方法注入讲解
- Console命令详解,让调试js代码变得更简单
- ubuntu12.0.4 安装SSH服务
- 每次都会安装的XCode插件
- Android控件之DatePicker、TimePicker探究
- python笔记13--多线程
- lavaral5:实验楼构建大型网站(未完)