标签:
奶牛CJ:有N头奶牛想参加CJ,每头奶牛的智商分别为S_i,情商为F_i。欲挑出一群奶牛使得S之和与F之和都不为负数,且SF之和最大,求此最大值。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int dp[100*1000*2+16]; 5 int s[105]; 6 int f[105]; 7 int main() 8 { 9 int N; 10 cin>>N; 11 int center=100000; 12 int MAXN=200010; 13 for(int i=0;i<N;i++) 14 { 15 cin>>s[i]>>f[i]; 16 } 17 for(int i=0;i<=MAXN;i++) 18 { 19 dp[i]=-10000000; 20 } 21 dp[center]=0; 22 for(int i=0;i<N;i++) 23 { 24 if(s[i]>=0) 25 { 26 for(int j=MAXN;j>=s[i];j--) 27 { 28 dp[j]=max(dp[j],dp[j-s[i]]+f[i]); 29 } 30 } 31 else 32 { 33 for(int j=0;j-s[i]<=MAXN;j++) 34 { 35 dp[j]=max(dp[j],dp[j-s[i]]+f[i]); 36 } 37 } 38 } 39 int result=-1; 40 for(int i=center;i<=MAXN;i++) 41 { 42 if(dp[i]>=0) 43 { 44 result=max(result,i-center+dp[i]); 45 } 46 } 47 cout<<result<<endl; 48 return 0; 49 }
标签:
原文地址:http://www.cnblogs.com/xlsryj/p/4768559.html