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 ...
随机推荐
- Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考
本期内容 : 数据接收架构设计模式 数据接收源码彻底研究 一.Spark Streaming数据接收设计模式 Spark Streaming接收数据也相似MVC架构: 1. Mode相当于Rece ...
- SQLite 命令
在shell下直接敲 sqlite3 进入sqlite命令行模式下(CLP的shell模式,CLP是sqlite3的命令行程序) sqlite3 -help (注意有空格)显示命令行模式下,sqli ...
- 网站实现特定某个地区访问执行跳转(js方法)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- notepad++ 正则表达式
body { font-family: Bitstream Vera Sans Mono; font-size: 11pt; line-height: 1.5; } html, body { colo ...
- CentOS 6.5下搭建LAMP环境详细步骤
1.确认搭建LAMP所需的环境是否已经安装: [root@localhost ~]#rpm -q make gcc gcc-c++ zlib-devel libtool libtool-ltdl li ...
- Windows程序设计(第五版)学习:第四章 文本输出
第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域. 2,大多数 ...
- druid的安装
最近想玩druid.druid的底层是fastbit索引的列式存储.采用分布式的zookeeper调度.实时大数据分析软件.主要针对OLAP操作. 搭环境搭环境.druid的核心成员成立了一个叫imp ...
- SBT 构建scala eclipse开发
scala eclipse sbt 应用程序开发 搭建Eclipse开发Scala应用程序的一般步骤 一.环境准备: 1.Scala : http://www.scala-lang.org/ 2.Sc ...
- form表单中的常用控件
<form action="#" method="post"> placeholder:输入表单是提供一个提示 <input type=&qu ...
- Light OJ 1019 - Brush (V)(图论-dijkstra)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1019 题目大意:Tanvir想从节点1的位置走到节点n的位置, 输出最短距离, ...