Big Event in HDU HDU - 1171

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171

题意:给出每个物体的价值和物体的数量,如何分使得A,B所得价值最接近并且A的价值不能小于B

思路:将总和平分后,就是一道01背包题了

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn = 1e6;
int val[maxn];
int dp[maxn];
int main()
{
    int n,i,j,a,b,l,sum;
    while(~scanf("%d",&n))
    {
        if(n<=0)break;
        memset(val,0,sizeof(val));
        memset(dp,0,sizeof(dp));
        l = 0;
        sum = 0;
        for(i = 0;i<n;i++)
        {
            scanf("%d%d",&a,&b);
            while(b--)
            {
                val[l++] = a;
                sum+=a;
            }
        }
        for(i = 0;i<l;i++)
        {
            for(j = sum/2;j>=val[i];j--)//01背包
            {
                dp[j] = max(dp[j],dp[j-val[i]]+val[i]);

            }
        }
        printf("%d %d\n",sum-dp[sum/2],dp[sum/2]);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/kayiko/p/10776870.html

时间: 2024-10-13 11:52:38

Big Event in HDU HDU - 1171的相关文章

Saving HDU hdu

话说上回讲到海东集团面临内外交困,公司的元老也只剩下XHD夫妇二人了.显然,作为多年拼搏的商人,XHD不会坐以待毙的. 一天,当他正在苦思冥想解困良策的时候,突然想到了自己的传家宝,那是公司成立的时候,父亲作为贺礼送来的一个锦囊,徐父当时交代,不到万不得已的时候,不要打开它."现在不正是最需要的时候吗?",一边想,XHD一边找到了这个精心保管的锦囊,打开一看,里面只有一句话"杭城北麓千人洞有宝". 二话不说,XHD拿起一个大口袋就出发了,这个千人洞他是知道的,小的时

杭电 HDU ACM 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): 26957    Accepted Submission(s): 9504 Problem Description Nowadays, we all know that Computer College is the biggest department

HDU ACM 1171 Big Event in HDU

题意:给你N种不同的设备,每种设备的价值为V,每种设备的数量为M,请尽量把他们分为总价值相近的两堆,为两堆的价值分别是多少,大的在前面输出. 分析:看到网上很多版本,可以用母函数.多重背包解决:在这里用了0-1背包解决. 实现:把总价值的一半看为背包容量,价值看为质量,价值也看为体积:最后可以求出接近总价值一半的价值,另一半就用总价值减去背包得出的一半的价值即可,注意背包求出的总价值的一般可能小于总价值减去背包求出的一半的价值. #include<iostream> using namespa

多重背包之 HDU -1171Big Event in HDU &amp;HDU -2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

这两道题都是多重背包的基础题,前面的安格题意是:给出每个物体的价值和物体的数量,如何分使得A,B所得价值最接近并且A的价值不能小于B,就类似于NYOJ上的那个邮票分你一半那个意思,只不过这里不是一个而是多个,所以多重背包 前一个题是将总和的一半当作背包的容量来求,代码如下 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 int dp[1

HDU HDU 5375 Gray code(二进制和格雷码)

Description: The reflected binary code, also known as Gray code after Frank Gray, is a binary numeral system where two successive values differ in only onebit (binary digit). The reflected binary code was originally designed to prevent spurious outpu

HDOJ(HDU) 2500 做一个正气的杭电人(水~)

Problem Description 做人要有一身正气,杭电学子都应该如此.比如我们今天的考试就应该做到"诚信"为上. 每次考试的第一个题目总是很简单,今天也不例外,本题是要求输出指定大小的"HDU"字符串,特别地,为了体现"正气"二字,我们要求输出的字符串也是正方形的(行数和列数相等). Input 输入的第一行包含一个正整数N(N<=20),表示一共有N组数据,接着是N行数据,每行包含一个正整数M(M<=50),表示一行内有M个

HDU 5321 Beautiful Set 漂亮集合

题意:给定一个集合,含有n个数.浙理工先生和杭电先生各自有计算这个集合漂亮值的方法. 浙理工先生的计算方法是:对于这个n个数的某个排列,此排列的漂亮值为这个排列全部的区间最大公约数之和.然后这个集合的漂亮值为n个数的全部排列的漂亮值之和. 杭电先生的计算方法是:在这个n个数中选出k(1 ≤ k ≤ n)个数.对于某种选取方案.这样的方案的漂亮值为k个数的最大公约数乘上k.然后这个集合的漂亮值为全部选数方案的漂亮值之和. 然后他们想比比谁得到的漂亮值更大.由于数非常大,所以他们仅仅比較各自的结果对

HDU 5321 Beautiful Set 美丽集合

题意:给定一个集合,含有n个数.浙理工先生和杭电先生各自有计算这个集合美丽值的方法. 浙理工先生的计算方法是:对于这个n个数的某个排列,此排列的美丽值为这个排列所有的区间最大公约数之和.然后这个集合的美丽值为n个数的所有排列的美丽值之和. 杭电先生的计算方法是:在这个n个数中选出k(1 ≤ k ≤ n)个数,对于某种选取方案,这种方案的美丽值为k个数的最大公约数乘上k.然后这个集合的美丽值为所有选数方案的美丽值之和. 然后他们想比比谁得到的美丽值更大.因为数很大,所以他们只比较各自的结果对258

HDU 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): 27961    Accepted Submission(s): 9847 Problem Description Nowadays, we all know that Computer College is the biggest department