dp之多重背包(未用二进制优化)

hdu 2191:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    int num[1005];
    int weight[1005];
    int cost[1005];
    int dp[1005];
    while(T--)
    {
        memset(dp,0,sizeof(dp));
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i=0;i<m;i++)
        {
            scanf("%d %d %d",&cost[i],&weight[i],&num[i]);
        }
        for(int i=0;i<m;i++)
        {
            for(int k=0;k<num[i];k++)//当前i这个这个物体有多少件
            {
                for(int j=n;j>=cost[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-cost[i]]+weight[i]);
                }    
            }    
        }
        cout<<dp[n]<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/chinacwj/p/7054648.html