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的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...
随机推荐
- Lazarus中TScreen类使用介绍
描述:虚拟屏幕(桌面)可以包含多个物理显示器.Screen对象是鼠标指针.字体.窗体. 对于Delphi兼容的(不可见)DataModules也被列出了. 同时也追踪当前活动窗体窗体.控件和指针. S ...
- android ArrayAdapter 如何动态更改数据
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示,使用adpater与listview捆绑后,有时希望在程序使用过程中能动态的更改l ...
- JsonCpp 简单使用
[转]自: http://www.cnblogs.com/ytjjyy/archive/2012/04/17/2453348.html JsonCpp 是一个C++用来处理JSON 数据的开发包.下面 ...
- 【Android开发学习笔记】【第三课】Activity和Intent
首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activi ...
- jade模板引擎的基本使用
jade和ejs很大的不同是通过缩进的方式解决嵌套和成对标签的问题,比较适合有代码洁癖的同学. jade官方有基础的语法: http://naltatis.github.io/jade-syntax- ...
- windows下安装和配置mongoDB
上次在mac下安装和配置了mongodb,这次在windows下也尝试安装和配置mongodb. 1.首先下载mongodb压缩包,下载后解压到D盘或E盘.如下: 2.配置环境变量:桌面—计算机右键— ...
- css3常用动画效果集合01
/*由右到左进场*/ .FromRightToLeft{ -webkit-animation:FromRightToLeft 500s .2s ease both; } @-webkit-keyfra ...
- SQLSERVER 表名数据库名作为变量 必须使用动态SQL(源自网络)
动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_execut ...
- 【指标测试】影响IOPS的几个重要因素
1. 读写方式 顺序读写的IOPS要比随机读写的IOPS高.100%顺序读写来讲,顺序读要高于顺序写.100%随机读写来讲,随机读要高于随机写.小块读写的IOPS要比大块读写高.需要根据实际的应用程序 ...
- SpringMVC @ResponseBody的使用
原文链接:http://www.jianshu.com/p/7097fea8ce3f@ResponseBody用法作用:该注解用于将Controller的方法返回的对象,根据HTTP Request ...