hdu 1114 完全背包模板题(装满的)

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define MAX 10007
#define MAXN 507

using namespace std;

int dp[MAX];
int w[MAX];
int c[MAX];
int t,e,f,n,m;

int main  ( )
{
    scanf ( "%d" , &t );
    while ( t-- )
    {
        scanf ( "%d%d" , &e , &f );
        m = f - e;
        scanf ( "%d" , &n );
        for ( int i = 1 ; i <= n ; i++ )
            scanf ( "%d%d" , &w[i] , &c[i] );
        memset ( dp , 0x3f , sizeof ( dp ) );
        int flag = dp[0];
        dp[0] = 0;
        for ( int i = 1 ; i <= n ; i++ )
            for ( int j = c[i] ; j <= m ; j++ )
                dp[j] = min ( dp[j] , dp[j-c[i]] + w[i] );
        if ( dp[m] == flag ) 
            puts ( "This is impossible." );
        else printf ( "The minimum amount of money in the piggy-bank is %d.\n" , dp[m] );
    }
}

你可能感兴趣的:(C++,动态规划,背包)