链接:hdu 1171

题意:这题能够理解为n种物品,每种物品的价值和数量已知,现要将总物品分为A,B两部分,

使得A,B的价值尽可能相等,且A>=B,求A,B的价值分别为多少

分析:这题能够用母函数的思想解,只是求的不是方案数,而是推断尽可能接近总价值的一半的方案是否存在.

也能够用背包思想,每种物品的价值和数量已知,能够将总价值的一半作为容量,求最大价值,也就最接近所求值了

注:数组要开的略微大一点,否则可能WA

#include<stdio.h>
#include<string.h>
int c1[300010],c2[300010],w[300010],num[300010],n;
void mhs(int m)
{
int i,j,k;
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for(i=0;i<=w[1]*num[1];i+=w[1]) //将第一种物品形成的情况初始化为1
c1[i]=1;
for(i=2;i<=n;i++){
for(j=0;j<=m;j++)
for(k=0;k<=w[i]*num[i]&&j+k<=m;k+=w[i])
c2[j+k]+=c1[j];
for(j=0;j<=m;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
}
int main()
{
int m,i,s;
while(scanf("%d",&n)!=EOF){
if(n<0)
break;
s=0;
for(i=1;i<=n;i++){
scanf("%d%d",&w[i],&num[i]); //w数组表示i物品的价值,num数组表示i物品的数量
s+=w[i]*num[i]; //求出全部物品的总价值
}
if(n==0){ //当物品为0时,A,B肯定都为0
printf("0 0\n");
continue;
}
m=s/2;
mhs(m); //用母函数求s/2的方案情况
for(i=m;i>=0;i--) //求<=m最大的满足题意的值
if(c1[i])
break;
printf("%d %d\n",s-i,i);
}
return 0;
}

hdu 1171 Big Event in HDU(母函数)的更多相关文章

  1. HDU 1171 Big Event in HDU 多重背包二进制优化

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Jav ...

  2. 组合数学 - 母函数的变形 --- hdu 1171:Big Event in HDU

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

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

  4. HDU 1171 Big Event in HDU 母函数

    欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory ...

  5. HDU 1171 Big Event in HDU (多重背包变形)

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

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

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

  7. 【01背包】HDU 1171 Big Event in HDU

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

  8. HDU 1171 Big Event in HDU dp背包

    Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s ...

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

随机推荐

  1. [置顶] github简单使用

    git的介绍可以看这里   http://zh.wikipedia.org/wiki/GitHub 安装和使用参考的这个    http://www.cnblogs.com/cocowool/arch ...

  2. graph driver-device mapper-02driver基本操作

    // 清除thin pool 1.1 func (d *Driver) Cleanup() error { // 停止thin pool err := d.DeviceSet.Shutdown() r ...

  3. 微信公众平台PHP开发

    p=932" style="color: rgb(255, 153, 0); text-decoration: none;">微信公众平台PHP开发 2013.05 ...

  4. ARM架构和编程-4

    ARM中断异常处理: ARM系统中止品种:按中断处理降序排列优先级:重置.数据访问中止.高速中断请求.外部中断请求.预取中止.令.软件中断. ARM体系中的异常中断向量表: 0x0 复位 0x4 没有 ...

  5. WPF案例 (四) 模拟Windows7桌面任务栏

    原文:WPF案例 (四) 模拟Windows7桌面任务栏 这个程序模彷了Windows7的桌面任务栏,当在桌面上双击某个快捷方式时,将打开一个新的子界面,并且在任务栏里创建一个链接到此界面的任务栏图标 ...

  6. poj3254(状压dp)

    题目连接:http://poj.org/problem?id=3254 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相 ...

  7. hdu4586(概率、期望)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4586 题意:有一个色子,n面,每面有个分值a[i],其中有m面比较特殊,当该面出现时,可以再投一次.求 ...

  8. ESXI主机打开shell后主机警告处理

    昨天为了配置snmp监控,将几台ESXI 5.5主机的shell 在控制台上从disable状态修改为enable状态后,登陆vcenter后,发现所有的主机都有警告. 处理过程如下: 选中有警告标志 ...

  9. 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)(转)

    最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...

  10. FMOD在Android玩音响系统的抖动问题

    1. 基本介绍 在Android升级系统Android4.4之后,发现FMOD在Android音会出现抖动.导致声音不正常.边赫赫有名的"极品飞车"都有问题. 经查验,是FMOD的 ...