标签:style blog class code c tar
题目链接:
题目:
3 10 1 2 4 2 1 1 2 5 1 4 2 1 0 0
8 4
代码如下:
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=100000+10;
int dp[maxn],v[105],Count[105],m;
void zeroonepack(int cost,int value)
{
    for(int i=m;i>=cost;i--)
        dp[i]=max(dp[i],dp[i-cost]+value);
}
void completepack(int cost,int value)
{
    for(int i=cost;i<=m;i++)
        dp[i]=max(dp[i],dp[i-cost]+value);
}
void multiplepack(int cost,int value,int amount)
{
    int k=1;
    if(cost*amount>=m)
        completepack(cost,value);
    else
    {
        while(k<amount)
        {
            zeroonepack(k*cost,k*value);
            amount-=k;
            k*=2;
        }
        zeroonepack(amount*cost,amount*value);
    }
}
int main()
{
    int i,j,n,min_count;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        min_count=0;
        if(n==0&&m==0) return 0;
        for(i=1;i<=n;i++)
            scanf("%d",&v[i]);
        for(i=1;i<=n;i++)
            scanf("%d",&Count[i]);
        for(i=1;i<=n;i++)
        {
            multiplepack(v[i],v[i],Count[i]);
        }
        for(i=1;i<=m;i++)
        {
            if(dp[i]==i)
                min_count++;
        }
        printf("%d\n",min_count);
    }
    return 0;
标签:style blog class code c tar
原文地址:http://blog.csdn.net/u014303647/article/details/26073613