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