Bookshelf 2
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7496   Accepted: 3451

Description

Farmer John recently bought another bookshelf for the cow library, but the shelf is getting filled up quite quickly, and now the only available space is at the top.

FJ has N cows (1 ≤ N ≤ 20) each with some height of Hi (1 ≤
Hi ≤ 1,000,000 - these are very tall cows). The bookshelf has a height of
B (1 ≤ BS, where S is the sum of the heights of all cows).

To reach the top of the bookshelf, one or more of the cows can stand on top of each other in a stack, so that their total height is the sum of each of their individual heights. This total height must be no less than the height of the bookshelf in order for
the cows to reach the top.

Since a taller stack of cows than necessary can be dangerous, your job is to find the set of cows that produces a stack of the smallest height possible such that the stack can reach the bookshelf. Your program should print the minimal 'excess' height between
the optimal stack of cows and the bookshelf.

Input

* Line 1: Two space-separated integers: N and B

* Lines 2..N+1: Line i+1 contains a single integer: Hi

Output

* Line 1: A single integer representing the (non-negative) difference between the total height of the optimal set of cows and the height of the shelf.

Sample Input

5 16
3
1
3
5
6

Sample Output

1

Source

USACO 2007 December Bronze

题意:就是给出n和b。然后给出n个数。用这n个数中的某些。求出一个和,这个和是>=b的最小值,输出最小值与b的差。

分析:这道题非常easy。是非常明显的01背包问题,这里的n个物品,每一个物品的重量为c[i],价值为w[i]而且c[i]==w[i],。容量为全部c[i]的和sum。仅仅要在f[]中从头開始找。找到一个最小>=b的就是题目要的解

一開始看错题了,以为是最接近b的值。WA无数次。

代码:46MS

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
#define M 1000005
#define N 10005
int map[N],dp[M];
int main()
{
int i,j,n,v,sum;
while(cin>>n>>v)
{
memset(dp,0,sizeof(dp));
memset(map,0,sizeof(map));
sum=0;
for(i=1;i<=n;i++) {cin>>map[i];sum+=map[i];}
for(i=1;i<=n;i++)
for(j=sum;j>=map[i];j--)
dp[j]=max(dp[j],dp[j-map[i]]+map[i]);
for(i=1;i<=sum;i++)
{
if(dp[i]>=v) //明显。第一个比v大的一定满足条件。
{cout<<dp[i]-v<<endl;break;}
}
}
return 0;
}

最新文章

  1. poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
  2. tmux常用快捷键
  3. BZOJ 1797: [Ahoi2009]Mincut 最小割
  4. ViewController与outlet绑定
  5. SFTP 上传文件夹
  6. 15个必须知道的chrome开发者技巧
  7. SOAP+WSDL
  8. 如何在Android Studio上使用Github
  9. SugarSync网盘之NSDateFormatter
  10. c++11の条件变量
  11. 使用Linux的环境变量
  12. caffe2学习
  13. 2017-11-25 中文代码示例之Spring Boot 1.3.3演示
  14. C#:导入Excel通用类(Xlsx格式)
  15. Linux-系统相关命令及配置文件
  16. 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别
  17. docker-machine create -d generic 运行的波折过程及遇见的问题
  18. install ros-indigo-camera-info-manager
  19. leetcode个人题解——#33 Search in Rotated Sorted Array
  20. 使用inline-block,使前面img,后面空div居中显示在一行后,导致当div中有内容时,div下移问题

热门文章

  1. 【Mysql】将Excel表导入至Mysql的当中一张表
  2. 搜索 debian8.7.1 ,google vs baidu
  3. THC=TERMINAL HANDLING CHARGE,碼頭操作費
  4. python使用大漠插件进行脚本开发的尝试(一)
  5. CISP/CISA 每日一题 七
  6. 【例7-15 UVA-1603】Square Destroyer
  7. Android DiskLruCache全然解析,硬盘缓存的最佳方案
  8. ubuntu-工作环境配置(van)
  9. android 闹钟提醒并且在锁屏下弹出Dialog对话框并播放铃声和震动
  10. 利用jquery.fullPage.js 和 scrolloverflow.min.js 实现滚屏效果