Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法
Big Event in HDU
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24708 Accepted Submission(s): 8700
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).
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.
2
10 1
20 1
3
10 1
20 2
30 1
-1
20 10
40 40//背包方法:#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[100000],sum,ans;
struct st
{
int v;
int m;
}data[100000];
void full(int x)
{
for(int i=data[x].v;i<=ans;i++)
dp[i]=max(dp[i],dp[i-data[x].v]+data[x].v);
}
void one(int x)
{
for(int j=1;j<=data[x].m;j++)
for(int i=ans;i>=data[x].v;i--)
dp[i]=max(dp[i],dp[i-data[x].v]+data[x].v);
}
int main()
{
int i,j,n;
while(scanf("%d",&n)&&(n>0))
{
memset(dp,0,sizeof(dp));
sum=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&data[i].v,&data[i].m);
sum+=data[i].v*data[i].m;
}
ans=sum/2;
for(i=1;i<=n;i++)
{
if(data[i].v*data[i].m>=ans)
full(i);
else
one(i);
}
printf("%d %d\n",sum-dp[ans],dp[ans]);
}
return 0;
}//母函数方法:/*注意将数组a,s清零,WA了好几次,測试数据都过。。无语。
*/
#include<stdio.h>
#include<string.h>
int a[250010],s[250010];
int v[55],m[55];
int main()
{
int n,i,j,k,sum,ans;
while(scanf("%d",&n)&&n>0)
{
sum=0;
memset(s,0,sizeof(s));
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
{
scanf("%d%d",&v[i],&m[i]);
sum+=v[i]*m[i];
}
for(i=0;i<=v[1]*m[1];i+=v[1])//注意变化。
{
s[i]=1;
}
for(i=2;i<=n;i++)
{
for(j=0;j<=sum;j++)
{
for(k=0;k+j<=sum&&k<=v[i]*m[i];k+=v[i])
{
a[k+j]+=s[j];
}
}
for(k=0;k<=sum;k++)
{
s[k]=a[k];
a[k]=0;
}
}
for(i=sum/2;i>=0;i--)
{
if(s[i])
{
printf("%d %d\n",sum-i,i);
break;
}
}
}
return 0;
}
Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法的更多相关文章
- Big Event in HDU(HDU1171)可用背包和母函数求解
Big Event in HDU HDU1171 就是求一个简单的背包: 题意:就是给出一系列数,求把他们尽可能分成均匀的两堆 如:2 10 1 20 1 结果是:20 10.才最均匀! 三 ...
- HDU - 2604 矩阵快速幂 字符串递推 两种解法
记dp[i]为长度i且符合题意的方案数,dp[n]就是解 符合方案的是不含fmf和fff子串的字符串 考虑如何从前面几项递推出后面第i项 (★表示存在生成的非法方案)←其实没啥用处 i=1时 m③ f ...
- 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)
今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...
- HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...
- 杭电1171 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(HDU 1171 多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】
pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...
- 『ACM C++』HDU杭电OJ | 1418 - 抱歉 (拓扑学:多面体欧拉定理引申)
呕,大一下学期的第一周结束啦,一周过的挺快也挺多出乎意料的事情的~ 随之而来各种各样的任务也来了,嘛毕竟是大学嘛,有点上进心的人多多少少都会接到不少任务的,忙也正常啦~端正心态 开心面对就好啦~ 今天 ...
随机推荐
- 终于懂了:Delphi消息的Result域出现的原因——要代替回调函数的返回值!(MakeObjectInstance不会帮助处理(接收)消息回调函数的返回值)
MakeObjectInstance应该不会帮助处理(接收)消息回调函数的返回值,可是有时候又确实需要这个返回值,这可怎么办呢?我是看到这段文字的时候,想到这个问题的: 当WM_PAINT不是由Inv ...
- java.util.zip - Recreating directory structure(转)
include my own version for your reference. We use this one to zip up photos to download so it works ...
- Richard Stallman与洪峰谈黑客道培训实录_业界_科技时代_新浪网
Richard Stallman与洪峰谈黑客道培训实录_业界_科技时代_新浪网 Richard Stallman与洪峰谈黑客道培训实录
- 随想录(关于ucore)
[ 声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前用过一段时间skyeye,也对开发skyeye的陈渝有一些了解.近期在github上闲逛的 ...
- Androidclient推断server是否开启 HttpHostException解决方式
Android推断服务器是否开启,试了非常多方法都不行(若server未开启会卡在HttpResponse那),有人说高版本号的Android程序不同意在主线程中訪问网络(主线程中能够读写网络流)有待 ...
- [docker]docker的四种网络方式
声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) H ...
- HDU 1535 Invitation Cards (POJ 1511)
两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...
- wamp环境中mysql更改root密码
集成的wamp环境命令不好使,在phpmyadmin中更改密码 权限——root用户修改,执行 然后,你会发现你不能用phpmyadmin登陆了修改下phpmyadmin里面对应的密码就可以了将php ...
- Theano+Keras+CUDA7.5+VS2013+Windows10x64配置
Visual Studio 2013 正常安装,这里只要C++打勾就可以. ANACONDA ANACONDA是封装了Python的科学计算工具,装这个就可以不用额外装Python了.在安装之前建议先 ...
- Flex与Java交互(Flex调用java类展示数据)解析xml展示数据
Flex与java通信最简单例子(详细说明了各种需要注意的配置):http://blog.csdn.net/u010011052/article/details/9116869 Flex与java通信 ...