hdu 3449 Consumer(0,1背包)

来源:互联网 发布:macbookpro必装软件 编辑:程序博客网 时间:2024/04/30 12:37
//hdu 3449 Consumer(0,1背包空间优化)#include<iostream>#include<cstdio>#include<string.h>using namespace std;const int N=55;const int M=100008;int dp[2][M];int Max(int a,int b){return a>b?a:b;}int main(){    int n,w;    int pi,mi;    int cj,vj;    while(scanf("%d%d",&n,&w)!=EOF)    {         memset(dp[0],0,sizeof(dp[0]));        for(int i=1;i<=n;i++)        {            scanf("%d%d",&pi,&mi);            for(int j=0;j<pi;j++)            {                dp[i%2][j]=-1;            }            for(int j=w;j-pi>=0;j--)            {                dp[i%2][j]=dp[(i-1)%2][j-pi];            }            //============================            for(int k=1;k<=mi;k++)            {                scanf("%d%d",&cj,&vj);                for(int j=w;j>=cj;j--)                {                    if(dp[i%2][j-cj]!=-1)                    {                       dp[i%2][j]=Max(dp[i%2][j],dp[i%2][j-cj]+vj);                    }                }            }            //=============================            for(int j=w;j>=0;j--) dp[i%2][j]=Max(dp[i%2][j],dp[(i-1)%2][j]);        }        printf("%d\n",dp[n%2][w]);    }    return 0;}

#include<iostream>#include<cstdio>#include<string.h>using namespace std;const int N=55;const int M=100008;int dp[N][M];int Max(int a,int b){return a>b?a:b;}int main(){    int n,w;    int pi,mi;    int cj,vj;    memset(dp[0],0,sizeof(dp[0]));    while(scanf("%d%d",&n,&w)!=EOF)    {        for(int i=1;i<=n;i++)        {            scanf("%d%d",&pi,&mi);            for(int j=0;j<pi;j++)            {                dp[i][j]=-1;            }            for(int j=w;j-pi>=0;j--)            {                dp[i][j]=dp[i-1][j-pi];            }            for(int k=1;k<=mi;k++)            {                scanf("%d%d",&cj,&vj);                for(int j=w;j>=cj;j--)                {                    if(dp[i][j-cj]!=-1)                    {                       dp[i][j]=Max(dp[i][j],dp[i][j-cj]+vj);                    }                }            }            for(int j=w;j>=0;j--) dp[i][j]=Max(dp[i][j],dp[i-1][j]);        }        printf("%d\n",dp[n][w]);    }    return 0;}


0 0
原创粉丝点击