Big Event in HDU(HDU1171)可用背包和母函数求解
Big Event in HDU HDU1171
就是求一个简单的背包:
题意:就是给出一系列数,求把他们尽可能分成均匀的两堆
如:2 10 1 20 1 结果是:20 10。才最均匀!
三种解法:
多重背包的优化与否:(1031MS)
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int dp[];
int a[],b[];
int main()
{
int n,s,i,j,k;
while(scanf("%d",&n)!=EOF)
{
if(n<)
break;
s=;
for(i=;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
s+=a[i]*b[i];
}
memset(dp,,sizeof(dp));
for(i=;i<n;i++)
for(j=;j<=b[i];j++)
for(k=s/;k>=a[i];k--)
dp[k]=max(dp[k],dp[k-a[i]]+a[i]);
if(dp[s/]>s-dp[s/])
printf("%d %d\n",dp[s/],s-dp[s/]);
else
printf("%d %d\n",s-dp[s/],dp[s/]);
}
return ;
}
二进制优化的:(46MS)
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[],a1[];
int main()
{
int a[],b[],n,i,j,k,s,cout1;
while(scanf("%d",&n)!=EOF)
{
if(n<)
break;
s=;
cout1=;
for(i=;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
s+=a[i]*b[i];
for(k=;k<=b[i];k<<=)
{
a1[cout1++]=k*a[i];
b[i]-=k;
}
if(b[i]>)
a1[cout1++]=b[i]*a[i];
}
memset(dp,,sizeof(dp));
for(i=;i<cout1;i++)
for(j=s/;j>=a1[i];j--)
dp[j]=max(dp[j],dp[j-a1[i]]+a1[i]);
if(dp[s/]>=s-dp[s/])
printf("%d %d\n",dp[s/],s-dp[s/]);
else
printf("%d %d\n",s-dp[s/],dp[s/]);
}
return ;
}
最后是母函数求解的:(875MS)
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int c1[],c2[];
int main()
{
int n,i,j,k,s;
int a[],b[];
while(scanf("%d",&n)!=EOF)
{
s=;
if(n<)
break;
for(i=;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
s+=a[i]*b[i];
}
for(i=;i<=s;i++)
{
c1[i]=;
c2[i]=;
}
c1[]=;
for(i=;i<=n;i++)
{
for(j=;j<=s;j++)
for(k=;k+j<=s,k<=a[i]*b[i];k+=a[i])
c2[k+j]+=c1[j];
for(j=;j<=s;j++)
{
c1[j]=c2[j];
c2[j]=;
}
}
for(i=s/;i<=s;i++)
{
if(c1[i]!=)
break;
}
if(i>=s-i)//且要取最大值
printf("%d %d\n",i,s-i);
else
printf("%d %d\n",s-i,i);
}
return ;
}
Big Event in HDU(HDU1171)可用背包和母函数求解的更多相关文章
- hdu1171 Big Event in HDU(01背包) 2016-05-28 16:32 75人阅读 评论(0) 收藏
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- poj3211Washing Clothes(字符串处理+01背包) hdu1171Big Event in HDU(01背包)
题目链接: id=3211">poj3211 hdu1171 这个题目比1711难处理的是字符串怎样处理,所以我们要想办法,自然而然就要想到用结构体存储.所以最后将全部的衣服分组,然 ...
- HDU 1171 Big Event in HDU (多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU1171--Big Event in HDU(多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Big Event in HDU(多重背包套用模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...
- HDU 1171 Big Event in HDU【01背包/求两堆数分别求和以后的差最小】
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 题解报告:hdu 1171 Big Event in HDU(多重背包)
Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...
- HDU1171_Big Event in HDU【01背包】
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Big Event in HDU[HDU1171]
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- C++ 约瑟夫环问题
约瑟夫环比较经典了 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直 ...
- java web _BBS
在注册时用户输入用户名和密码不合格在旁边提示 在用户发言带有屏蔽字时应在旁边提示,但不影响其发送,只是在显示时屏蔽关键字
- AngularJS 教程
AngularJS 教程 AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序(SPAs:Single Page Applications). ...
- weed-fs参数列表
weed-fs没有详细的帮助文档,为了方便阅读,特意把有用的参数帮助罗列出来.未列出的两个命令为version(版本查询) 及shell(这个命令在0.45版本只有回显功能)nerc@Ubuntu:~ ...
- C# 远程网络唤醒介绍及代码
一.定义 网络唤醒:唤醒休眠状态下的计算机,而不是已关机的计算机. 优势:可通过定时功能实现自动唤醒计算机,减少人力使用. 实现方法:通过被唤醒机的MAC地址进行广播发送请求,唤醒计算机. 二.硬件设 ...
- RSA加密前端JS加密,后端asp.net解密,报异常
RSA加密前端JS加密,后端asp.net解密,报异常 参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() ...
- C# byte数组转换成List<String>
byte[] bys=buffer; string[] AllDataList= Encoding.Default.GetString(bys).Split(Environment.NewLine. ...
- Operate blob data in Oracle via C#
oracle table: CREATE TABLE "SCOTT"."TEST_BLOB" ( "NAME" VARCHAR2 ...
- iOS崩溃日志记录工具--CrashlyTics
http://try.crashlytics.com Crashlytics优势: 1.Crashlytics基本不会漏掉任何应用崩溃的信息 2.Crashlytics对崩溃日志管理很人性化,会根据崩 ...
- 在eclipse之中使用Junit
使用Junit单位测试,能够一定程度上减小项目bug的产生.很多时候,我们都是在main函数里面单独去测试一个方法,这样的测试非常不方便.使用Junit可以是测试单位和项目代码分离,一次性测试多个方法 ...