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)可用背包和母函数求解的更多相关文章

  1. 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 ...

  2. poj3211Washing Clothes(字符串处理+01背包) hdu1171Big Event in HDU(01背包)

    题目链接: id=3211">poj3211  hdu1171 这个题目比1711难处理的是字符串怎样处理,所以我们要想办法,自然而然就要想到用结构体存储.所以最后将全部的衣服分组,然 ...

  3. HDU 1171 Big Event in HDU (多重背包)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  4. HDU1171--Big Event in HDU(多重背包)

    Big Event in HDU   Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  5. Big Event in HDU(多重背包套用模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...

  6. 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 ...

  7. 题解报告:hdu 1171 Big Event in HDU(多重背包)

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  8. HDU1171_Big Event in HDU【01背包】

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. Big Event in HDU[HDU1171]

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. C++ 约瑟夫环问题

    约瑟夫环比较经典了 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直 ...

  2. java web _BBS

    在注册时用户输入用户名和密码不合格在旁边提示 在用户发言带有屏蔽字时应在旁边提示,但不影响其发送,只是在显示时屏蔽关键字

  3. AngularJS 教程

    AngularJS 教程 AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序(SPAs:Single Page Applications). ...

  4. weed-fs参数列表

    weed-fs没有详细的帮助文档,为了方便阅读,特意把有用的参数帮助罗列出来.未列出的两个命令为version(版本查询) 及shell(这个命令在0.45版本只有回显功能)nerc@Ubuntu:~ ...

  5. C# 远程网络唤醒介绍及代码

    一.定义 网络唤醒:唤醒休眠状态下的计算机,而不是已关机的计算机. 优势:可通过定时功能实现自动唤醒计算机,减少人力使用. 实现方法:通过被唤醒机的MAC地址进行广播发送请求,唤醒计算机. 二.硬件设 ...

  6. RSA加密前端JS加密,后端asp.net解密,报异常

    RSA加密前端JS加密,后端asp.net解密,报异常 参考引用:http://www.ohdave.com/rsa/的JS加密库 前端JS加密代码: function GetChangeStr() ...

  7. C# byte数组转换成List<String>

    byte[] bys=buffer; string[] AllDataList=  Encoding.Default.GetString(bys).Split(Environment.NewLine. ...

  8. Operate blob data in Oracle via C#

    oracle table: CREATE TABLE "SCOTT"."TEST_BLOB"    (    "NAME" VARCHAR2 ...

  9. iOS崩溃日志记录工具--CrashlyTics

    http://try.crashlytics.com Crashlytics优势: 1.Crashlytics基本不会漏掉任何应用崩溃的信息 2.Crashlytics对崩溃日志管理很人性化,会根据崩 ...

  10. 在eclipse之中使用Junit

    使用Junit单位测试,能够一定程度上减小项目bug的产生.很多时候,我们都是在main函数里面单独去测试一个方法,这样的测试非常不方便.使用Junit可以是测试单位和项目代码分离,一次性测试多个方法 ...