HDU2159 FATE

#include<stdio.h>
#include<string.h>
int d[101][101];
int main()
{
    int i,j,t,flag,v,w,n,m,k,s;
    while(~scanf("%d%d%d%d",&n,&m,&k,&s)){
        memset(d,0,sizeof(d));
        for(flag=i=0;i<k;++i){
            scanf("%d%d",&v,&w);
            for(j=w;j<=m;++j)
                for(t=1;t<=s;++t)
                    d[j][t]>?=d[j-w][t-1]+v;
        }
        for(flag=i=0;i<=m;++i)
            if(d[i][s]>=n){
                flag=1;
                break;
            }
        if(flag) printf("%d\n",m-i);
        else puts("-1");
    }
    return 0;
}

二维背包问题,把打怪物数量的限制也算上一维,就成了典型的二维背包问题!!

原文地址:https://www.cnblogs.com/shihuajie/p/3046766.html