题目http://poj.org/problem?id=3628

分析:给定一堆牛的高度,把牛叠加起来的高度超过牛棚的高度。
且是牛叠加的高度与牛棚高度之差最小。
把牛叠加的高度看作是背包的容量,利用01背包计算所能达到的最大值。
然后在最大值里面选择一个与牛棚高度差值最小的。

在开辟dp[]数组的时候没有必要开辟20*1000000不然会超过内存,适当小一点即可。
#include<stdio.h>
#include<string.h>

const int INF=0XFFFFFF;

int dp[2000002];

int main()
{
  int N,B,sum,h[21];
  while (scanf("%d%d",&N,&B)!=EOF)
  {
    //读取数据,并计算牛叠加高度
    sum=0;
    for(int i=1;i<=N;i++)
     {
       scanf("%d",&h[i]);
       sum+=h[i];
     }
    
    //初始化,不需要装满
    memset(dp,0,sizeof(dp));

    //求所能达到的最大高度
    for(int i=1;i<=N;i++)
      for(int j=sum;j>=h[i];j--)
       dp[j]=dp[j]>dp[j-h[i]]+h[i]?dp[j]:dp[j-h[i]]+h[i];
    
    //计算差值最小的
    int min=INF;
    for(int i=B;i<=sum;i++)
      if(dp[i]>=B&&dp[i]-B<=min) min=dp[i]-B;
      
    printf("%d\n",min);
  }
  return 0;
}


最新文章

  1. 【原】AFNetworking源码阅读(三)
  2. Bash 是如何从环境变量中导入函数的
  3. MYSQL 分组排序
  4. jdk的内存设置
  5. Stack Overflow is a question and answer site
  6. Unity协程(Coroutine)管理类——TaskManager工具分享
  7. c# 二进制或算法实现枚举的HasFlag函数
  8. sql 语句查询练习题
  9. Android TabHost中Activity之间传递数据
  10. 【Netty】第一个Netty应用
  11. 将百度的ECharts整合到阿里的Weex中。
  12. LintCode题解之比较字符串
  13. Coroutine协同程序介绍(Unity3D开发之三)
  14. win7下配置mysql的my.ini文件
  15. Ubuntu 16.04 安装 Python3.6
  16. java 连接SQL Server
  17. Angularjs 过滤器使用
  18. linux centos 7 nodejs 的安装
  19. Exception in thread &quot;main&quot; java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
  20. Ubuntu上安装git和创建工作区和提交文件!!!

热门文章

  1. pytorch clamp 与clamp_区别
  2. Hive HA基本原理
  3. cvErode和cvDilate腐蚀和膨胀函数
  4. dev设置子窗体的初始位置,grid控件表头的属性设置
  5. CSIC_716_20191102【input、数据类型概述、运算符】
  6. Apache虚拟目录实现同一个IP绑定多个域名
  7. 校园商铺-2Logback配置与使用-2Logback配置
  8. PHP跨服务器提交数据
  9. 最大流拆点——hdu2732,poj3436
  10. 在idesktop中加载天地图服务并叠加矢量数据