杭电1171 Big Event in HDU(母函数+多重背包解法)
Big Event in HDU
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23728 Accepted Submission(s): 8363
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/*
母函数解法:将能筹成的标记成1,找最接近sum/2的就能够
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using std::max;
const int MAX=52;
bool c1[MAX*MAX*100];//c2[MAX*MAX*100];
int main(){
int N;
int val[MAX],Count[MAX];
while(scanf("%d",&N),N>0){
int sum=0;
memset(val,0,sizeof(val));
memset(Count,0,sizeof(Count));
memset(c1,0,sizeof(c1));
for(int i=1;i<=N;i++){
scanf("%d%d",&val[i],&Count[i]);
sum+=val[i]*Count[i];
}
c1[0]=1;
int Limit=sum>>1;
for(int i=1;i<=N;i++){
for(int j=0;j<=Limit;j++){
for(int k=0;j+k<=Limit&&k<=val[i]*Count[i];k+=val[i])
c1[k+j]=(c1[k+j]==1?c1[k+j]:c1[j]);//注意此处不能直接等于,防止出现 50 30 20 ,v[20]=0;的情况,是能够筹成50的
}
/*
for(int j=0;j<=Limit;j++){
c1=c2[j];
c2[j]=0;
}*/
}
int k=Limit;
while(1){
if(c1[k]){
printf("%d %d\n",sum-k,k);
break;
}
k--;
}
}
return 0;
}/*
多重背包解法:
将体积和价值都看做 价值,上限也是 sum/2,找最大值,用sum-d[sum/2]便是较大的那一个
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using std::max;
const int MAX=51;
int sum,Count,N;
int dp[MAX*MAX*100];
int v[MAX],w[MAX],c[MAX];
int V[MAX],W[MAX];
void Div(){//多重背包分解
Count=0;
for(int i=0;i<N;i++){
for(int j=1;j<=c[i];j<<=1){
W[Count++]=w[i]*j;
c[i]-=j;
}
if(c[i]>0){
W[Count++]=w[i]*c[i];
}
}
}
int main(){
while(scanf("%d",&N),N>0){
sum=0;
memset(w,0,sizeof(w));
memset(c,0,sizeof(c));
memset(W,0,sizeof(W));
memset(dp,0,sizeof(dp));
for(int i=0;i<N;i++){
scanf("%d%d",&w[i],&c[i]);
sum+=w[i]*c[i];
}
int upLimit=sum>>1;
Div();
for(int i=0;i<Count;i++){
for(int j=upLimit;j>=W[i];j--){
dp[j]=max(dp[j],dp[j-W[i]]+W[i]);
}
}
printf("%d %d\n",sum-dp[upLimit],dp[upLimit]);
}
return 0;
}
杭电1171 Big Event in HDU(母函数+多重背包解法)的更多相关文章
- 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(多重背包)
Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...
- hdu 1171 Big Event in HDU(多重背包+二进制优化)
题目链接:hdu1171 思路:将多重背包转为成完全背包和01背包问题,转化为01背包是用二进制思想,即件数amount用分解成若干个件数的集合,这里面数字可以组合成任意小于等于amount的件数 比 ...
- 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 母函数
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory ...
- 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 ...
- HDU1171--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(0-1背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1171 题意:给出一系列的价值,需要平分,并且尽量接近. 思路:0—1背包问题. 0-1背包问题也就是有n种物品且 ...
随机推荐
- Ajaxterm-0.10-8.el5.noarch.rpm CentOS 5 (RHEL 5) Download
Ajaxterm-0.10-8.el5.noarch.rpm CentOS 5 (RHEL 5) Download Install Howto Download the latest epel-rel ...
- Visual Prolog 的 Web 专家系统 (8)
GENI核心 -- 推理引擎(2)流量控制 1.阐述fail."!"而回溯 与其他语言相比,,Prolog最大的特点.这是回溯机制. 回溯机制,还有的主要手段2个月,首先,通过使用 ...
- Domain Model(领域模型)
Domain Model(领域模型) 上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply. ...
- Vagrant - 百度百科
http://wapbaike.baidu.com/view/9201587.htm?ssid=0&from=844b&uid=3151E6C0905477A13653132D762B ...
- python面向对象的继承
无话可说,继承主要是一些父类继承,代码是非常具体的 #!/usr/bin/env python #coding:utf-8 class Father(object):#新式类 def __init__ ...
- 经典回忆Effective C++ 1
c++ 联邦语言: typedef { unit C; unit Object-Oriented C++; unit Template C++; unit STL; }; notice: C++高效编 ...
- Android Graphics专题(1)--- Canvas基础
作为Android Graphics专题的开篇.毫无疑问,我们将讨论Android UI技术的核心概念--Canvas. Canvas是Android UI框架的基础,在Android的控件体系中.全 ...
- HDU 1253-大逃亡(裸-DBFS)
G - 胜利大逃亡 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- 关于使用X-UA-Compatible来设置IE浏览器兼容模式
原文地址:http://www.cnblogs.com/nidilzhang/archive/2010/01/09/1642887.html 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外 ...
- shell统计
for i in `ls -r *_*.csv`;do cat $i|echo $i": "`wc -l`;done>tongji.txt