poj2184

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 200105
 4 int f[N+10];
 5 int Max(int x,int y)
 6 {
 7     if(x>y)
 8         return x;
 9     return y;
10 }
11 int main()
12 {
13     int n,i,j,x,y;
14     scanf("%d",&n);
15     for(i=0;i<=N;i++)
16         f[i]=-N;
17     f[100000]=0;
18     while(n--)
19     {
20         scanf("%d%d",&x,&y);
21         if(x<0&&y<0)
22             continue;
23         else if(x>0)
24         {
25             for(i=200000;i>=x;i--)
26             {
27                 f[i]=Max(f[i],f[i-x]+y);
28             }
29         }
30         else
31         {
32             for(i=0;i<=200000+x;i++)
33                 f[i]=Max(f[i],f[i-x]+y);
34         }
35     }
36     int max=-N;
37     for(i=200000;i>=100000;i--)
38     {
39         if(f[i]>0)
40         max=Max(max,f[i]+i-100000);
41     }
42     if(max>0)
43     printf("%d
",max);
44     else
45         printf("0
");
46     return 0;
47 }
48 /*
49 5
50 -5 7
51 8 -6
52 6 -3
53 2 1
54 -8 -5
55 */
View Code
原文地址:https://www.cnblogs.com/zlyblog/p/3194026.html