/*
题意:
输入一个数n代表有n种物品,
接下来输入物品的价值和物品的个数;
然后将这些物品分成A B 两份,使A B的价值尽可能相等也就是尽量分的公平一些,如果无法使A B相等,那么就使A多一些;
思路:
先计算这些物品的总价值,然后从这些物品中去一些出来,使他们的价值尽可能的接近总价值的一半,
由此可以想到用01背包的思路;
背包容量是总价值的一半,物品体积等于物品的价值;
 
*/
 
 
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int dp[300000];
int value[10000];
int main()
{
    int n;
    while(scanf("%d",&n)&&n>0)
    {
        int weight[n+1];
        int sum=0,count=0;
        int a=0;
        memset(dp,0,sizeof(dp));
        memset(value,0,sizeof(value));//多组测试数据,记得将值初始化
        for(int i=1; i<=n; i++)
        {
            scanf("%d%d",&a,&weight[i]);//输入物品的价值和物品的个数
            sum+=a*weight[i];//计算总价值
            while(weight[i]--)
            {
                count++;
                value[count]=a;//将每(个)物品的价值保存起来,而不是只保存每(种)物品的价值
                               //因为是将总价值平分
            }
        }
        int k=sum/2;//背包容量是总价值的一半,此时会自动向前取整,所以k可能会比一总值的一半少些,
                   //所以到最后的结果dp[k]是B的值
        //cout<<"k="<<k<<endl;
        for(int i=1; i<=count ; i++)
            for(int j=k; j>=value[i]; j--)
                dp[j]=max(dp[j],dp[j-value[i]]+value[i]);//01背包
        printf("%d %d\n",sum-dp[k],dp[k]);//输出A  B;
    }
    return 0;
}
/*
 
2
10 1
20 1
3
10 1
20 2
30 1
 
*/

Big Event in HDU(01背包)的更多相关文章

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

  2. HUD 1171 Big Event in HDU(01背包)

    Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...

  3. 1171 Big Event in HDU 01背包

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1171 题意:把商品分成两半,如不能均分,尽可能的让两个数相接近.输出结果:两个数字a,b且a>=b. ...

  4. hdu1171Big Event in HDU(01背包)

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

  5. HDU 1171 Big Event in HDU(01背包)

    题目地址:HDU 1171 还是水题. . 普通的01背包.注意数组要开大点啊. ... 代码例如以下: #include <iostream> #include <cstdio&g ...

  6. HDU 1171 Big Event in HDU(01背包)

    题目链接 题意:给出n个物品的价值v,每个物品有m个,设总价值为sum,求a,b.a+b=sum,且a尽可能接近b,a>=b. 题解:01背包. #include <bits/stdc++ ...

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

  8. hdu 01背包汇总(1171+2546+1864+2955。。。

    1171 题意比较简单,这道题比较特别的地方是01背包中,每个物体有一个价值有一个重量,比较价值最大,重量受限,这道题是价值受限情况下最大,也就值把01背包中的重量也改成价值. //Problem : ...

  9. HDU 1171 Big Event in HDU dp背包

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

随机推荐

  1. php中调用其他系统http接口的方法说明

    使用函数: file_get_contents($url); 传入接口url及其参数:如 $url="http://192.168.1.1/test.jsp?id=1&type=2& ...

  2. [LeetCode OJ] Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  3. SGU 101.Domino (欧拉路)

    时间限制: 0.5 sec 空间限制: 4096 KB 描述 多米诺骨牌,一种用小的方的木块或其他材料,每个都被一些点在面上标记,这些木块通常被称为骨牌.每个骨牌的面都被一条线分成两个   方形,两边 ...

  4. SGU 224.Little Queens

    时间限制:0.75s 空间限制:6M 题意 n*n(n<=10)的棋盘,求出放置m(m<=n*n)个皇后的方案数. Solution: 状态压缩+位运算  搜索. 首先我们从上往下逐行放置 ...

  5. TextView控件

    1.手动创建(不建议): TextView tv = new TextView(this); tv.setContent("你好"); setContentView(tv); 2. ...

  6. IoC模式(控制反转)(转)

    转自:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html,写的很好,用C#代码解释控制反转,然后更进一步,提到依赖注入是控制反转的 ...

  7. mysqldump: command not found问题解决

    首先得知道mysql命令或mysqldump命令的完整路径,可以使用find命令查找除非你知道mysql安装路径可以略过这一步. find / -name mysql -print 例如我的mysql ...

  8. ICE学习第一步-----配置ICE环境变量

    安装 ICE: 1.下载ICE: http://www.zeroc.com/download.html 下载说明:ICE支持语言(C++, Java, C#, Visual Basic,Python, ...

  9. NPOI使用手册

    HSSFSheet sheet = hssfworkbook.CreateSheet("new sheet"); // Create a row and put some cell ...

  10. 理解CSS Clip属性及用法

    应用Clip属性实现的一个简单效果图: 样式写法: .my-element { position: absolute; clip: rect(10px  350px  170px  0); /* IE ...