poj之旅_2184

来源:互联网 发布:mysql可视化面板 编辑:程序博客网 时间:2024/05/22 04:20

题目描述有N头奶牛想参加CJ,每头奶牛的智商分别为S_i,情商为F_i。欲挑出一群奶牛使得S之和与F之和都不为负数,且SF之和最大,求此最大值

题解:01背包,把S看成包重,F看成价值。注意C中没有下标为负的数组,只好将数组右移足够大的单位,注意要分S的正负讨论。


参考程序:

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int f[1000*100*2+26];int w[120],v[120];int main(){int n;scanf("%d",&n);int center=1000*n;int M=2*center+20;for (int i=0;i<n;i++)scanf("%d %d",&w[i],&v[i]);memset(f,0x80,sizeof(f));f[center]=0;for (int i=0;i<n;i++)if (w[i]>=0)for (int j=M;j>=w[i];j--)f[j]=max(f[j],f[j-w[i]]+v[i]);elsefor (int j=0;j-w[i]<M;j++)f[j]=max(f[j],f[j-w[i]]+v[i]);int ans=-M;for (int i=center;i<M;i++)if (f[i]>=0)ans=max(ans,i-center+f[i]);printf("%d",ans);return 0;}


0 0
原创粉丝点击