Shirlies
宁静专注认真的程序媛~

这是我第一次碰到背包的题目,做的很烂,还是看过背包九讲的,唉~

简单的多重背包

#include "stdio.h"
#include "string.h"
#define MAX(a,b) ((a)>(b)?(a):(b))

int
dp[90000];

int
main()
{

    int
T;
    int
n,m;
    int
p,w,b;
    int
i,j,k;

    scanf("%d",&T);
    while
(T--)
    {

        scanf("%d%d",&n,&m);
        memset(dp,0,sizeof(dp));

        for
(i=0;i<m;i++)
        {

            scanf("%d%d%d",&p,&w,&b);
            for
(k=n;k>=0;k--)
            {

            for
(j=b;j>=0;j--)
            {

                if
(j*p<=k)
                {

                    dp[k]=MAX(dp[k-j*p]+j*w,dp[k]);
                }
            }
            }
        }


        printf("%d\n",dp[n]);
    }
}


posted on 2011-11-26 10:45  Shirlies  阅读(234)  评论(0编辑  收藏  举报