POJ2184 Cow Exhibition 【01背包】

Cow Exhibition

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 9383   Accepted: 3601

Description

"Fat and docile, big and dumb, they look so stupid, they aren‘t much

fun..."

- Cows with Guns by Dana Lyons

The cows want to prove to the public that they are both smart and fun. In order to do this, Bessie has organized an exhibition that will be put on by the cows. She has given each of the N (1 <= N <= 100) cows a thorough interview and determined two values for
each cow: the smartness Si (-1000 <= Si <= 1000) of the cow and the funness Fi (-1000 <= Fi <= 1000) of the cow.

Bessie must choose which cows she wants to bring to her exhibition. She believes that the total smartness TS of the group is the sum of the Si‘s and, likewise, the total funness TF of the group is the sum of the Fi‘s. Bessie wants to maximize the sum of TS
and TF, but she also wants both of these values to be non-negative (since she must also show that the cows are well-rounded; a negative TS or TF would ruin this). Help Bessie maximize the sum of TS and TF without letting either of these values become negative.

Input

* Line 1: A single integer N, the number of cows

* Lines 2..N+1: Two space-separated integers Si and Fi, respectively the smartness and funness for each cow.

Output

* Line 1: One integer: the optimal sum of TS and TF such that both TS and TF are non-negative. If no subset of the cows has non-negative TS and non- negative TF, print 0.

Sample Input

5
-5 7
8 -6
6 -3
2 1
-8 -5

Sample Output

8

Hint

OUTPUT DETAILS:

Bessie chooses cows 1, 3, and 4, giving values of TS = -5+6+2 = 3 and TF

= 7-3+1 = 5, so 3+5 = 8. Note that adding cow 2 would improve the value

of TS+TF to 10, but the new value of TF would be negative, so it is not

allowed.

Source

USACO 2003 Fall

题意:有n头牛,每头牛有两个属性s,f,从中选择一些牛使得这些牛的属性s的和TS为非负,属性f的和TF也为非负。并且求TS+TF的最大值。

题解:dp[i]中i表示TS为i时能得到的TF最大值。具体的解法也是参考网上的解题报告,Click

#include <stdio.h>
#include <string.h>
#include <algorithm>

#define maxn 200010
#define delta 1000 * 100
#define inf 0x3f3f3f3f
using namespace std;

int dp[maxn], N, ans; // dp[i] stands when TS is i, the max TF
struct Node {
    int s, f;
} arr[102];

int main() {
    // freopen("stdin.txt", "r", stdin);
    int i, j, s, f, begin, end, u, v, step;
    scanf("%d", &N);
    for(i = 0; i < N; ++i) {
        scanf("%d%d", &s, &f);
        if(s <= 0 && f <= 0) {
            --i; --N;
            continue;
        }
        arr[i].s = s;
        arr[i].f = f;
    }
    fill(dp, dp + maxn, -inf);

    u = v = 0; dp[0 + delta] = 0;
    for(i = 0; i < N; ++i) {
        step = 1;
        u = min(u, u + arr[i].s);
        v = max(v, v + arr[i].s);

        begin = u; end = v;
        if(arr[i].s > 0) {
            step = -1;
            swap(begin, end);
        }

        for(j = begin; j != end + step; j += step) // j maybe negative
            dp[j + delta] = max(dp[j+delta], dp[j+delta-arr[i].s] + arr[i].f);
    }

    for(i = 0; i <= v; ++i)
        if(dp[i+delta] >= 0)
            ans = max(ans, dp[i+delta] + i);
    printf("%d\n", ans);
    return 0;
}
时间: 2024-11-03 21:58:07

POJ2184 Cow Exhibition 【01背包】的相关文章

poj2184 Cow Exhibition p-01背包的灵活运用

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://poj.org/problem?id=2184 Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with Guns by Dana Lyons The cows want to prove to the public that they ar

poj 2184 - Cow Exhibition (01背包) 解题报告

Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10279   Accepted: 4016 Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with Guns by Dana Lyons The cows want to prove to

POJ 2184 Cow Exhibition (01背包)

题意:每行给出si和fi,代表牛的两个属性,然后要求选出几头牛,是的则求出总S与总F的和,注意S与F都不能为负数 析:用dp[i]来表示存放s[i]的时最大的f[i],其实就是一个01背包.只是取不取的关系.注意是有负数,所以把数组开大一点,然后s[i]的正负数, 我们取的顺序不同,正数是逆向,负数是正向,要不然可能有重复.还不知道为什么交G++就RE,交C++就能过. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000&quo

poj 2184 Cow Exhibition 01背包变形

点击打开链接链接 Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9288   Accepted: 3551 Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with Guns by Dana Lyons The cows want to p

PKU 2184 Cow Exhibition 01背包

题意: 有一些牛,每头牛有一个Si值,一个Fi值,选出一些牛,使得max( sum(Si+Fi) ) 并且 sum(Si)>=0, sum(Fi)>=0 思路: 随便选一维做容量(比如Fi),另一维做价值,然后直接做01背包. 做的时候注意一下方向. 最后,在合法解里面找一下最优解就好了. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib>

POJ 2184 Cow Exhibition 01背包变型 好题

题意:n头牛,每头牛有两个属性值,smart值s,fun值f,求选出其中的m头牛,使得s和f的总和最大,并保证各自的s和以及f和都大于0. 分析: 怎么保证TS和TF都是>=0的条件下使得TS+TF最大? 先保证TS和TF都是>=0,然后遍历一边取TS+TF的最大值就ok了. 转化问题,求s和为某个固定值时候最大的f和值,然后遍历这些所有的s和以及对应的f和值,求出总和总和最大的那个. 那么这样就是一个0-1背包问题,可以把s值理解为代价,f值理解为价值 dp[c]代表s和为c时候,f和能取到

台州 OJ 5072 Cow Exhibition 01背包

给出 n 头牛,每头牛有两个属性 smartness 和 funness ,求从所有的牛里选一些牛,使这些牛的 smartness + funness 的和最大,且 smartness 的和.funness的和都要大于零. 定义 dp[i][j] 表示前 i 头牛在 smartness 为 j 时 funness 的最大值. dp[i][j+s[i]] = max(dp[i-1][j+s[i]], dp[i-1][j] + f[i])    s[i].f[i] 分别表示第 i 头牛的 smart

Cow Exhibition 变种背包

Cow Exhibition Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with Guns by Dana Lyons The cows want t

poj2184 Cow Exhibition(p-01背包的灵活运用)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://poj.org/problem?id=2184 Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with Guns by Dana Lyons The cows want to prove to the public that they ar