poj2184

来源:互联网 发布:淘宝收藏夹2000不够用 编辑:程序博客网 时间:2024/06/06 11:23

01背包问题

#include<stdio.h>#include<string.h>#define INF 1000000#define MAX_LMT  210000#define MAX_N   110#define  DELTA  10000int max(int ,int );int main(){  int n,cost[MAX_N],val[MAX_N],dp[MAX_LMT];  int i,j;  while(scanf("%d",&n)!=EOF)  {    for(i=1;i<=n;i++)    {      scanf("%d%d",&cost[i],&val[i]);    }     for(i=0;i<MAX_LMT;i++)      dp[i]=-INF;    dp[DELTA]=0;    for(i=1;i<=n;i++)    {      if(cost[i]>0)      {        for(j=MAX_LMT;j>=cost[i];j--)        {          dp[j]=max(dp[j-cost[i]]+val[i],dp[j]);        }      }      else      {        for(j=0;j<MAX_LMT+cost[i];j++)        {          dp[j]=max(dp[j-cost[i]]+val[i],dp[j]);        }      }    }    int ans=0;    for(i=DELTA;i<MAX_LMT;i++)    {      if(dp[i]>0&&(i-DELTA+dp[i]>ans))      {        ans=i+dp[i]-DELTA;      }    }    printf("%d\n",ans);  }  return 0;}int max(int x,int  y){  return x>y?x:y;}


0 0
原创粉丝点击