3564: 小张的困惑
题目描述
最近,一直在IT行业"搬砖"的程序员小张考虑到自己日渐稀疏的发量,决定跳槽去做工地"搬砖"做一名真正的民工,可是小张进入工地的第二天,包工头就交代给了小张另一个对发量极为不利的烧脑任务。现在有M(1≤M≤20)块工地的石材,高度分别Hi米(1≤Hi≤1000,000),这些石材的垒起来的总高度为S,包工头让小张从这些石材中选出一些石材,垒出一个工作台,要求工作台的高度不能低于N米(1 ≤ N ≤ S ),并且高出N米的长度越少越好,这样方便工人站在该工作台上作业。现在,你能帮小张从这M块石材中找出一个集合,垒起来的高度满足包工头的要求吗?
输入
第一行M和N分别表示石材的个数和包工头要求的最低高度
第二到M+1行,H1,H2,…HM表示每块石材的高度
输出
输出一个整数,表示满足包工头要求的石材垒出的高度。
样例输入
copy
5 16
3
1
3
5
6
样例输出
17
每个数字都有选和不选两个情况。用一个数组b保存二叉树;
当和大于要求值时开始记录与要求值相差最小的值,最后加上要求值就是答案;
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num,maxn,a[25]={