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 ;

} 

你可能感兴趣的:(HDU)