Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer College had ever been split into Computer College and Software College in 2002.
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).

InputInput contains multiple test cases. Each test case starts
with a number N (0 < N <= 50 -- the total number of different
facilities). The next N lines contain an integer V (0<V<=50
--value of facility) and an integer M (0<M<=100 --corresponding
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.

OutputFor each case, print one line containing two integers A and B
which denote the value of Computer College and Software College will
get respectively. A and B should be as equal as possible. At the same
time, you should guarantee that A is not less than B.

Sample Input

2
10 1
20 1
3
10 1
20 2
30 1
-1

Sample Output

20 10
40 40 母函数模板题
#include<bits/stdc++.h>

using namespace std;
#define maxn 1250000 int ans[maxn], temp[maxn];
int v[],num[];
int n, sum; void init()
{
// memset(a,0,sizeof(a));
int mid = sum/;
ans[]=;
int i, j, k;
for(i=; i<=num[]; i++)
ans[i*v[]] = ;
for(i=; i<n; i++)
{
for(j=; j<=mid; j++)
for(k=; (k*v[i]+j)<=mid&&k<=num[i]; k++)
{
temp[j+k*v[i]] +=ans[j];
}
for(j=; j<=mid; j++)
{
ans[j] = temp[j];
temp[j] = ;
}
}
} int main()
{
int n;
while(cin >> n && n!= -)
{
sum = ;
memset(ans, , sizeof(ans));
for(int i = ; i < n; i++)
{
cin >> v[i] >> num[i];
sum += v[i]*num[i];
}
init();
for(int i = sum/; i>=; i--)
{
if(ans[i]) {cout << sum-i << " " << i << endl;break;}
}
}
return ;
}

上面的代码连样例都过不了,但我们只要把 上面的 void init() 函数写到主函数里面去, 就能AC, 楼主不太懂, 大佬能说一下吗???

AC代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#define MAXN 1001000
using namespace std; int value[200],number[200],ans[MAXN],temp[MAXN];
int main()
{
    int n,i,j,k;
    while(cin >> n&&n>=0)
    {
        int max = 0;
        for(i=0; i<n; i++)
        {
            cin >> value[i] >> number[i];
            max += value[i] * number[i];
        }
        int mid = max/2 ;
        memset(ans,0,sizeof(int)*mid+10);
        memset(temp,0,sizeof(int)*mid+10);
        for(i=0; i<=number[0]; i++)
            ans[i*value[0]] = 1;
        for(i=1; i<n; i++)
        {
            for(j=0; j<=mid; j++)
                for(k=0; (k*value[i]+j)<=mid&&k<=number[i]; k++)
                {
                    temp[j+k*value[i]] +=ans[j];
                }
            for(j=0; j<=mid; j++)
            {
                ans[j] = temp[j];
                temp[j] = 0;
            }
        }
        for(i=mid; i>=0; i--)
            if(ans[i]!=0)
                break;
        cout << max - i<<" "<< i << endl;
    }
    return 0;
}

Big Event in HDU (母函数, 玄学AC)的更多相关文章

  1. HDU1171——Big Event in HDU(母函数)

    Big Event in HDU DescriptionNowadays, we all know that Computer College is the biggest department in ...

  2. HDU 1171 Big Event in HDU 母函数

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

  3. Big Event in HDU(HDU1171)可用背包和母函数求解

    Big Event in HDU  HDU1171 就是求一个简单的背包: 题意:就是给出一系列数,求把他们尽可能分成均匀的两堆 如:2 10 1 20 1     结果是:20 10.才最均匀! 三 ...

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

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

  5. Big Event in HDU(杭电1171)(多重背包)和(母函数)两种解法

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

  6. 杭电1171 Big Event in HDU(母函数+多重背包解法)

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

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

  8. Big Event in HDU(多重背包套用模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...

  9. hdoj1171 Big Event in HDU

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

随机推荐

  1. 剑指Offer题解(Python版)

    https://blog.csdn.net/tinkle181129/article/details/79326023# 二叉树的镜像    链表中环的入口结点    删除链表中重复的结点    从尾 ...

  2. dbtool部署

    dbtool工具部署 a.附件解压到/home/oracle/dbtool b.执行以下命令chmod 755 /home/oracle/dbtool/*.shecho "alias dbt ...

  3. activeMQ配置文件

    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agree ...

  4. (转载)centos7启用端口

    转载:原文地址:https://www.cnblogs.com/moxiaoan/p/5683743.html   1.firewalld的基本使用 启动: systemctl start firew ...

  5. JavaScript学习(一)

    变量本身是没有类型的,类型在于它的值(注意开头都是小写).

  6. pymongo模块 目录

    MongoDB pymongo模块 MongoDB pymongo模块 查询 MongoDB pymongo模块 插入数据 MongoDB pymongo模块 更新数据 MongoDB pymongo ...

  7. Python3学习之路~6.8 多态

    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型 ...

  8. Fast-R-CNN

    基于R-CNN和SPP-Net思想,RBG提出了Fast-R-CNN算法.如果选用VGG16网络进行特征提取,在训练阶段,Fast-R-CNN的速度相比RCNN和SPP-Net可以分别提升9倍和3倍: ...

  9. 安卓端数据导出成txt文件

    toExport() { if (this.dataList == false) { this.$createDialog({ type: "alert", content: &q ...

  10. echart图表

    http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts