hdu(1171)多重背包
hdu(1171)
Big Event in HDU
Time Limit:
10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19752 Accepted Submission(s): 6900
The splitting is absolutely a big event in HDU! At the same time, it is a trouble thing too. All facilities must go halves. First, all facilities are assessed, and two facilities are thought to be same if they have the same value. It is assumed that there is
N (0<N<1000) kinds of facilities (different value, different kinds).
number of the facilities) each. You can assume that all V are different.
A test case starting with a negative integer terminates input and this test case is not to be processed.
A is not less than B.
2
10 1
20 1
3
10 1
20 2
30 1
-1
20 10
40 40分析:多重背包问题,先计算总价值sum,然后取其一半V=sum/2;剩下的就是多重背包问题了程序:#include"stdio.h"
#include"string.h"
int f[250005];
int p[100],h[100];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,i,j,k,sum,V;
while(scanf("%d",&n),n>=0)
{
sum=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&p[i],&h[i]);
sum+=p[i]*h[i];
}
V=sum/2;
for(i=0;i<=V;i++)
f[i]=0;
for(i=1;i<=n;i++)
{
for(j=V;j>=p[i];j--)
{
for(k=0;k<=h[i]&&k*p[i]<=j;k++)
f[j]=f[j]>f[j-k*p[i]]+k*p[i]?f[j]:f[j-k*p[i]]+k*p[i]; }
}
printf("%d %d\n",sum-f[V],f[V]);
}
return 0;
}运行时间2309ms还有一种可快速的方法就是利用二进制混合背包:程序:#include"string.h"
#include"stdio.h"
int f[250020],V;
void zopack(int v,int p)
{
int i;
for(i=V;i>=v;i--)
f[i]=f[i]>f[i-v]+p?f[i]:f[i-v]+p;
}
void allpack(int v,int p)
{
int i;
for(i=v;i<=V;i++)
f[i]=f[i]>f[i-v]+p?f[i]:f[i-v]+p; }
void multiplepack(int v,int p,int h)
{
if(v*h>=V)
{
allpack(v,p);
return;
}
int k=1;
while(k<h)
{
zopack(k*v,k*p);
h-=k;
k<<=1;
}
if(h>0)
{
zopack(h*v,h*p);
}
}
int main()
{
int n,i,v[111],h[111];
while(scanf("%d",&n),n>=0)
{
int sum=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&v[i],&h[i]);
sum+=v[i]*h[i];
}
V=sum/2;
for(i=0;i<=V;i++)
f[i]=-999;
f[0]=0;
for(i=0;i<n;i++)
{
multiplepack(v[i],v[i],h[i]);
}
int ans=-1;
for(i=V;i>=0;i--)
{
if(f[i]>=0)
{
ans=f[i];
break;
}
}
printf("%d %d\n",sum-ans,ans);
}
return 0;
}时间只用31~64ms
hdu(1171)多重背包的更多相关文章
- Big Event in HDU(HDU 1171 多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 1171 多重背包
题意:给出价值和数量,求能分开的最近的两个总价值,例如10,20*2,30,分开就是40,40 链接:点我 #include<cstdio> #include<iostream> ...
- hdu 5445 多重背包
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- HDU 1171 Big Event in HDU (多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 题解报告:hdu 1171 Big Event in HDU(多重背包)
Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...
- hdu 1171 Big Event in HDU(多重背包+二进制优化)
题目链接:hdu1171 思路:将多重背包转为成完全背包和01背包问题,转化为01背包是用二进制思想,即件数amount用分解成若干个件数的集合,这里面数字可以组合成任意小于等于amount的件数 比 ...
- hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- Big Event in HDU(多重背包套用模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...
- HDU1171--Big Event in HDU(多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1059 (多重背包) Dividing
这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...
随机推荐
- Java 获取类名,函数名,行数
C++下用宏来实现.分别是__FILE__,__func__,__LINE__分别代表,C++编译自动在每个文件中设定__FILE__类型是字符串常量 ,将__LINE__替换为当前行数,类型是数字常 ...
- C++ char*,const char*,string的相互转换
1. string转const char* string s ="abc";constchar* c_s = s.c_str(); 2. const char*转string ...
- 【ZBar】ios错误ignoring file xxx missing required architecture x86_64 in file
解决方法: 1.在Project target里"Architectures"设置为:Standard (armv7,armv7s)或者 Standard (armv7,arm6 ...
- Sandbox 文件存放规则
文档1, document2, document3 一.文件路径介绍 <Application_Home>/AppName.app : 1) This is the bundle dir ...
- Solaris 10下Qt编译Oracle 10g驱动
上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...
- SVN命令详解
在开发中,除了在本机文件夹上进行svn更新外,在命令行中进行svn操作也非常关键,下面列举下网站摘抄的一些文档:1.将文件checkout到本地目录 svn checkout path(path是服务 ...
- 昂贵的聘礼---poj1062(最短路)
题目链接:http://poj.org/problem?id=1062 题意很清楚: 可以虚拟一个起点0,由于存在等级关系,所以可以枚举等级,然后把各种关系建立边,然后计算0到1的距离即可,去最小值即 ...
- imx6 system boot
imx6开机启动就进入download模式,有的板子进入文件系统之后会进入download模式.查看datasheet,Chapter 8 System Boot查找原因,记录于此. freescal ...
- OC initialize和init
Objective-C很有趣的一个地方是,它非常非常像C.实际上,它就是C语言加上一些其他扩展和一个运行时间(runtime). 有了这个在每个Objective-C程序中都会起作用的附加运行时间,给 ...
- 微信支付开发(2) 静态链接Native支付
关键字:微信支付 微信支付v3 native支付 统一支付 Native支付 prepay_id 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv ...