hdu 5410 CRB and His Birthday 01背包和完全背包

来源:互联网 发布:制作app软件 编辑:程序博客网 时间:2024/05/16 13:02
#include<stdio.h>#include<string.h>#include<vector>#include<queue>#include<algorithm>using namespace std;int main(){    int _,i,j,m,n,k,a[1024],b[1024],w[1024],dp[2048];    scanf("%d\n",&_);    while(_--)    {        scanf("%d%d",&m,&n);        for(i=0;i<n;i++)            scanf("%d%d%d",&w[i],&a[i],&b[i]);        memset(dp,0,sizeof(dp));        for(i=0;i<n;i++)        {            for(j=m;j>=w[i];j--)                dp[j]=max(dp[j],dp[j-w[i]]+a[i]+b[i]);            for(j=w[i];j<=m;j++)                dp[j]=max(dp[j],dp[j-w[i]]+a[i]);        }        printf("%d\n",dp[m]);    }    return 0;}

第一次全部当成01背包做无限超时。

#include<stdio.h>#include<string.h>#include<vector>#include<queue>#include<algorithm>using namespace std;int main(){    int _,i,j,m,n,k,a[1024],b[1024],w[1024],dp[2048];    scanf("%d\n",&_);    while(_--)    {        scanf("%d%d",&m,&n);        for(i=0;i<n;i++)            scanf("%d%d%d",&w[i],&a[i],&b[i]);        memset(dp,0,sizeof(dp));        for(i=0;i<n;i++)        {            k=m/w[i];            while(k!=0)            {                for(j=m;j>k*w[i];j--)                    dp[j]=max(dp[j],dp[j-k*w[i]]+k*a[i]+b[i]);                k--;            }        }        printf("%d\n",dp[m]);    }    return 0;}
0 0
原创粉丝点击