hdu 2159 (完全背包)

#include<cstdio>
#include<cstring>
#define max(a, b)   a>b?a:b
using namespace std ;
int dp[105][105] ;
struct page{
    int w ;
    int v ;
}pg[105] ;
int main(){
    int n, m, k, s, i, j, h ;
    while(~scanf("%d%d%d%d", &n, &m, &k, &s)){
        for(i=1; i<=k; i++)
            scanf("%d%d", &pg[i].v, &pg[i].w) ;
        memset(dp, 0sizeof(dp)) ;
        for(i=1; i<=s; i++)
            for(h=1; h<=k; h++)
                for(j=pg[h].w; j<=m; j++)
                    dp[i][j] = max(dp[i][j], dp[i-1][j-pg[h].w]+pg[h].v) ;
        for(j=0; j<=m; j++)
            if(dp[i-1][j]>=n)
                break ;
        printf("%d\n", m-j) ;
    }
    return 0 ;

} 

原文地址:https://www.cnblogs.com/xiaolongchase/p/2253258.html