poj2184

Cow Exhibition

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 13578   Accepted: 5503

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.

01背包dp

设f[i]表示TS为i时TF的最大值。

因为TS可能为负数,所以将TS值+100000处理。

要注意当前si为正和为负时转移顺序不同,详见代码

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<algorithm>
 7 using namespace std;
 8 int n;
 9 int f[200005];
10 int a[101],b[101];
11 int main()
12 {
13     scanf("%d",&n);
14     for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
15     memset(f,-5,sizeof(f));
16     int ans=0,m1=0,m2=0;
17     f[100000]=0;
18     for(int i=1;i<=n;i++)
19     {
20         if(a[i]>0)
21             for(int j=200000;j>=a[i];j--)
22             {
23                 f[j]=max(f[j],f[j-a[i]]+b[i]);
24                 if(j-100000>=0&&f[j]>=0&&j-100000+f[j]>ans)ans=j-100000+f[j];
25             }
26         if(a[i]<0)
27             for(int j=0;j<=200000+a[i];j++)
28             {
29                 f[j]=max(f[j],f[j-a[i]]+b[i]);
30                 if(j-100000>=0&&f[j]>=0&&j-100000+f[j]>ans)ans=j-100000+f[j];
31             }
32     }
33     cout<<ans;
34 }

时间: 2024-11-07 02:37:56

poj2184的相关文章

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

POJ2184 01背包变形 xingxing在努力

这道题乍一看就有了思路,大体就是定了其中一个值然后再求另外一个值的最大值, 然而代码实现好坑, 题意是奶牛有两个属性 Ai和Bi, 让你求Ai和Bi和的最大值,注意Ai的和不能为负整数, Bi也一样..假设我们定了Ai我们来看下状态方程:f[i][j] = max(f[i-1][j], f[i-1][j-A[i]]+B[i]).当A[i]为正的时候就是我们经常遇到的01背包,使用滚动数组倒着排一遍, 然而当A[i]为负的时候我们就应该从小推到大,这样才对..代码如下: #include <cst

poj2184 Cow Exhibition

思路: dp+滚动数组. 类似01背包. 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 6 const int INF = 0x3f3f3f3f; 7 const int t = 100000; 8 int a[105], b[105], dp[2][200005], n, p, q; 9 int solve(int n) 10

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 t

poj2184 背包

1 //Accepted 1492 KB 110 ms 2 //背包 3 //把si看成weight,Fi看成value,这可以表示成当dp[j]=max(dp[j-weight[i]]+value[i]) 4 //考虑到si可能为负,需要整段区间的平移 5 //背包过程中,根据weight的正负,我们需要考虑dp的顺序,如果weight为正,这j从大到小 6 //如果weight为负,则要从小到大,这是根据dp[i][j]=max(dp[i][j],dp[i-1][j-weight[i]]+v

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

POJ2184——背包DP——Cow Exhibition

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 exhibitio

Cow Exhibition [POJ2184] [DP] [背包的负数处理]

题意: 有很多羊,每只羊有一个幽默度和智商,要选出一些羊,智商加幽默度总和最大,其中智商总和和幽默度总和都不能是负数. 样例输入: 5 -5 7 8 -6 6 -3 2 1 -8 -5 样例输出: 8 分析: 这很像一个01背包题,但是有两个价值,却没有重量 我们就把其中一个看成重量,另一个看成价值 答案就是max(i+dp[i]) 那如何保证数据大于0呢? 我们可以把价值总体向右移100000个单位,然后设原点O为100000 之后就可以进行dp了 转移方程仍是:dp[j]=dp[j-w[i]

poj 2184 Cow Exhibition(01背包)

Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10882   Accepted: 4309 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