天天看点

NYOJ298苹果 && P1005 属于01背包

01背包就是有限次的装包,需要倒着装

#include<stdio.h>
#include<string.h>
int main()
{
    int m,t,dp[],v,w;
    while(~scanf("%d%d",&t,&m)) 
    {
        memset(dp,,sizeof(dp));
        int i,j;
        for(i=;i<m;i++)
        {
            scanf("%d%d",&v,&w);
            for(j=t;j>=v;j--)
            {
                dp[j]=dp[j]>(dp[j-v]+w) ? dp[j] : dp[j-v]+w ;
            }
        }
        printf("%d\n",dp[t]);
    }
    return ;
} 
           
#include<stdio.h>
#include<string.h>
int main()
{
    int n,v,dp[],c,w;
    scanf("%d%d",&n,&v);

    while(n&&v)
    {
        memset(dp,,sizeof(dp));
        int i,j;
        for(i=;i<n;i++)
          {
            scanf("%d%d",&c,&w);
             for(j=v;j>=c;j--)
             {
                dp[j]=dp[j]>(dp[j-c]+w)?dp[j]:dp[j-c]+w;
             }
          }
        printf("%d\n",dp[v]);  
        scanf("%d%d",&n,&v);
    }
    return ;
}