BNUOJ 3869 Buying Hay

完全背包,不过在最优值的选取上稍微有些不同。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dp[56000];
int main()
{
    int n,h,mh,i,j,w[100],v[100];
    memset(dp,0x7f,sizeof(dp));
    scanf("%d%d",&n,&h);
    for (i=0; i<n; i++)
    {
        scanf("%d%d",v+i,w+i);
    }
    dp[0]=0;
    for (i=0; i<n; i++)
    {
        for (j=v[i]; j<=h+5000; j++)
        {
            if (dp[j] >= dp[j-v[i]]+w[i])
                dp[j]=dp[j-v[i]]+w[i];
        }
    }
    for (i=h+1; i<=h+5000; i++)
    {
        dp[h]=dp[h]>dp[i]?dp[i]:dp[h];
    }
    printf("%d\n",dp[h]);
}


你可能感兴趣的:(BNUOJ 3869 Buying Hay)